我常用的find命令
索引
find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
find . -name "*Iden*" -exec rm {} \;
find ./ \( -iname "*.c" -or -iname "*.cc" \) 查找以.c或.cc结尾的文件 忽略大小写
find -regex ".*\.\(xls\|csv\)" 查找以xls 或csv 结尾的文件
find -name "*.xls" -o -name "*.csv" 同上
find / -path /mnt -prune -o -regex ".*\.\(cc\|h\)"
find / \( -path /dev -o -path /var -o -path /mnt \) -prune -o -name "*.cc"|wc -l
如下三种方法都可以:
1.
- find . -name "abc*" ! -name "*.*" -print
2.
- find . -regex '.*/abc[^.]*'
3.
- find . -name "*.*" -o -name "abc*" -print
第一种方法是最容易理解的了,第二个 -name前的 ! 号表示 -not, 与-not的意义是相同的,所以也可以写成:
find . -name "abc*" -not -name "*.*" -print
第二种方法: 因为用-name选项的时候,find不支持正则表达式,此时要使用 -regex选项
正则式: '.*/abc[^.]*'
.*/ 表示在当前目录及下及目录中找
[^.]* 表示abc后匹配任意字符,除了.
第三种方法看起来很难理解
因为-o 是 or 的意思,也就是或
猛的看起来好像是说找到所有含有. 或者以abc开头的
其实不然
这两个-name构成了这样形式的表达式
Exp1 or Exp2
如果Exp1 为真的话,就不会再判断Exp2
如果Exp1为假,才执行Exp2,非常类似于C语言中的 " || " 符号
所以,如果匹配到有.的文件名,则不会执行后面的了,所以-print此时不会打印
今天也意外的发现了一点
find [path...] [expression]
在最后可以用 -exec command
如下:
find . -name "abc*" -exec ls {} /;
以前一直不明白后面加个 {} /;是干什么的
今天总算知道了
其实{} 表示匹配到前面的文件
所以,你也可以这样用:
find . -name "abc*" -exec mv {} {}.old /;
此时所完成的功能就是:
将所有以abc开关的文件,全部在后面加上 .old 后缀
2