find [选项] [path...]
选项 | 含义 |
---|---|
-help或--help | 在线帮助 |
-name <pattern> |
用shell模式 <pattern> 匹配文件名。 <pattern> 可以用引号括起来,也可以不用,但是最好是用引号括起来。 |
-iname <pattern> |
效果与-name类似,但忽略字符大小写 |
-ls | 列出文件或目录名称列表到标准输出 |
-exec command ; |
执行指令,详细用法请看下文的-exec command ; 用法说明 |
-type <c> |
只寻找符合指定的文件类型的文件, c这里是一个字符 |
-prune | 如果文件是一个目录,就不会进入此目录 |
-regex <pattern> |
用正则表达式匹配文件名,这只是匹配文件的全路径,不是文件内容。 |
-regextype <type> |
更改在命令行中稍后出现的-regex和-iregex测试所理解的正则表达式语法。 当前实现的 <type> 是emacs(这是默认的),posix - awk,posix - basic,posix - UNK p和posix - extended。 |
将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有"./"字符串 |
find .
find . -name "*.java"
find . -name "*.java" -o -name "*.cpp"
find . \( -name "*.java" -o -name "*.cpp" \)
或者使用正则表达式
find . | egrep ".*(\.java|\.cpp)$"
find . -regextype "posix-egrep" -regex ".*(\.java|\.cpp)$"
find . ! -name "*.cpp"
find . -type <类型参数>
类型参数 | 含义 |
---|---|
f | 普通文件 |
l | 符号链接 |
d | 目录 |
c | 字符设备 |
b | 块设备 |
s | 套接字 |
p | 管道FIFO |
find . -type f -name "*.class" -delete
find . -path "./src/com/fireway/util" -prune -o -name "*.java" -print
-exec command ;
的用法说明-exec
选项后面跟随着所要执行的命令或脚本,然后是一对大括号{}
,一个空格,一个反斜杠\
加上一个分号。因为分号;
在bash的环境下是有特殊意义的,因此利用反斜线来跳脱。
{}
花括号代表前面find查找出来的文件名
示例,显示
find . -exec ls -l {} \;
示例,删除
find . -exec rm -rf {} \;
示例,把当前所有的Android.mk文件重命名为Android.mk_bak
find . -name "Android.mk" -exec mv {} {}_bak \;
但是有一点不好的是只能在后面加个后缀。
示例,如果遇到想把后缀.class修改成.clazz,可以考虑写一个shell脚本。
for file in $(find . -name "*.class" -type f); do mv ${file} ${file/.class/.clazz}; done
具体的shell变量怎么替换的可以参考《shell变量详解》来搞定,这里就不再细写了。
注意xargs这里是一个单独的命令,不是find里面的一个选项。
原文:http://www.cnblogs.com/fireway/p/7261299.html