find命令的使用

Posted fireway

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find命令的使用相关的知识,希望对你有一定的参考价值。

语法

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。
-print 将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有"./"字符串

示例

列出当前目录及子目录下所有文件和文件夹

find .

在当前目录下查找.java文件

find . -name "*.java"

当前目录及子目录下查找所有.java和.cpp文件

find . -name "*.java" -o -name "*.cpp" 
find . \\( -name "*.java" -o -name "*.cpp" \\)

或者使用正则表达式

find . | egrep ".*(\\.java|\\.cpp)$" 
find . -regextype "posix-egrep" -regex ".*(\\.java|\\.cpp)$"

找出当前目录下不是以.cpp结尾的文件

find . ! -name "*.cpp"

根据文件类型搜索

find . -type <类型参数>

类型参数含义
f 普通文件
l 符号链接
d 目录
c 字符设备
b 块设备
s 套接字
p 管道FIFO

删除匹配文件

find . -type f -name "*.class" -delete

查找当前目录下所有的.java文件,但是跳过子目录chapter02

find . -path "./src/com/fireway/util" -prune -o -name "*.java" -print

-exec command ; 的用法说明

-exec选项后面跟随着所要执行的命令或脚本,然后是一对大括号{},一个空格,一个反斜杠\\加上一个分号。因为分号;在bash的环境下是有特殊意义的,因此利用反斜线来跳脱。 
centos7_find_exec

{}花括号代表前面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变量详解》来搞定,这里就不再细写了。

find结合xargs使用

注意xargs这里是一个单独的命令,不是find里面的一个选项。

参考资料

以上是关于find命令的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用sunOS中的find命令比较两个目录中的所有文件

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

实用代码片段将json数据绑定到html元素 (转)

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

VSCode自定义代码片段——cli的终端命令大全