find借助-exec
选项与{} \;结合使用(注意{}和\;之间有一个空格!)
1.找出当前目录下所有root的文件,并把所有权更改为用户tim
find . -type f -user root -exec chown tim {} \;
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
2.找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
-ok和-exec行为一样,不过它会给出二次确认提示,是否执行相应的操作。
3.查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
4.将30天前的.log文件移动到old目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
5.查找当前目录下所有今天(24小时内)修改过的文件.sh文件,并通过二次确认的方式删除
find . -type f -mtime -1 -name "*.sh" -ok rm {} \;
6.找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
7.调用.sh文件。因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
-exec ./test.sh {} \;
注:在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。此时应使用find与xargs命令结合实现。