【shell】find与xargs,exec结合用法详解
DATE: 2018.12.15
1、参考
https://blog.csdn.net/u011579204/article/details/46709929
https://blog.csdn.net/taiyang1987912/article/details/41488395
https://czmmiao.iteye.com/blog/1949225
https://blog.csdn.net/csyuanA/article/details/76408836
https://download.csdn.net/download/soaringlee_fighting/10854302
2、find命令详解
2.1 find命令的一般形式
find pathname -options [-print -exec -ok]
参数说明:
pathname:find命令查找的目录路径,例如.表示当前目录,/表示系统根目录,~表示$HOME目录。
-print : find命令将匹配的文件输出到标准输出stdout.
-exec :find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command
{} ;,注意{}和;之间的空格。
-ok和-exec的作用相同,只不过是以一种更加安全的模式来执行该参数给出的shell命令,在执行每一个参数之前,都会给出提示,让用户来确定是否执行。
2.2 find主要命令选项
选项 | 作用 |
---|---|
-name | 按照文件名查找文件 |
-perm | 按照文件权限来查找文件 |
-user | 按照文件属主来查找文件 |
-size n[c] | 查找文件长度为n块的文件,带有c时表示文件长度以字节计 |
-mtime -n /+n | 按照文件的更改时间来查找文件 |
-type | 查找某一类型的文件,例如d:目录 f:普通文件 p:管道文件 |
-depth | 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找 |
-follow | 如果find命令遇到符号链接文件,就跟踪到 链接所指向的文件 |
2.3 find用法示例
1、使用-name选项查找当前目录及子目录中所有txt文件
$ find ./ -name ".txt" -print
2、查找系统根目录下更新时间在5日以内的文件
$ find / -mtime -5 -print
3、使用-exec或-ok来执行shell命令
查找当前目录中所有普通文件并删除“”
$ find ./ -f -exec rm {} \;
$ find ./ -f -ok rm {} \;
3、xargs
3.1 由来
在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样find命令运行几分钟后,就会出现溢出错误 。这就有了xargs的用武之地。
3.2 find与xargs配合使用的巧妙
1、查找当前目录下所有txt文件并删除
$ find ./ -name "*.txt" | xargs rm
2、在整个系统中查找内存转储文件并把结果保存到/tmp/core.log中
$ find . -name "core" -print | xargs echo "" >/tmp/core.log
3、用grep命令在所有普通文件中搜索device这个词
$ find / -type f -print | xargs grep "device"
4、小结
find命令是一个非常优秀的工具,它可以按照用户指定的准则 来匹配文件。使用exec和xargs选项可以使用户对所匹配到的文件执行几乎所有的命令。