【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选项可以使用户对所匹配到的文件执行几乎所有的命令。


THE END!

原文地址:https://www.cnblogs.com/SoaringLee/p/10532199.html