关键字匹配

查找时用name参数可以进行通配符进行匹配比如最常用的*
find /path -name "*abc"
如果需要匹配多种不同的关键字可以通过-o参数指定多个name参数,比如:
find /path -name "*abc" -o -name "*def"
但如果有很多,这样显然不方便,尤其是匹配多种后缀,则需要使用-regex参数,该参数是正则匹配
参考链接:find查找多种文件后缀
find /path -regex ".*\.abc\|.*\.def"
也可以更改正则种类去写
find /path -regextype posix-extended -regex ".*\.(abc|def)"

查找深度

默认find命令会对所有目录进行最深的递归查询,可以通过-maxdepth参数指定查找深度
find /path -maxdepth 0 -name "*abc"
注意该参数需要放在其他参数前指定!
其中0代表递归0层,也就是不递归,只查找改目录下这一层的文件,这在获取目录下特定文件列表将很有用,懂得都懂

find命令对结果批量操作

有时候我们需要对find找到的所有结果做相同的操作,方法有很多,常见的有两种:
第一种是通过管道传递给xargs进行挨个命令执行操作,例如
find / -name "*.jpg" | xargs chmod 755
第二种是使用find自带的exec参数执行操作
find / -name "*.jpg" -exec chmod 755 {} \;
两者可以完成相同的操作,但是通过find自带的exec参数执行的效率要高于通过管道传递给其他命令执行
这里重点要说的是,这里{}大括号代表的是前面找到的参数,什么意思,find命令匹配到的这个参数,需要传递给后面要执行的命令,那么这里{}大括号就代表find匹配到的这个内容,后面的;则表示exec参数结束的标记
相同的,xargs也可以通过-i参数来使用{}大括号,比如
find / -name "*.jpg" | xargs -i chmod 755 {}
这将在不支持标准输入作为参数的命令上很有用