find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point ...] [expression]
↓
find [前置参数组] [路径组] [表达式组]
作用
用于寻找文件夹中符合表达式要求的文件,包括但不限于对文件名,文件创建时段,文件权限,文件所有者进行搜索。
前置参数
- [-H] 除[路径组]中的写明的软连接外,不搜寻路径中软连接下的结果
- [-L] 搜寻结果包括路径中的软连接下的结果
- [-P] (默认)不搜寻路径中软连接下的结果
- [-D] 诊断为何find不按指令方式工作,使用
find -D help
查看可以进行诊断的表达式,若需诊断多个不同表达式则用逗号隔开,如:find -D tree, exec
- [-O] 重新调整搜索顺序以优化搜索速度,分为0到3,共4个等级,其中0级与1级相同为默认优化等级,2级为中度优化,3级为最高优化,如
find -O3 / -name test.txt
意为以最高优化方式搜索本地名为test.txt的文件。
注:在输入多个HLP参数时仅最后输入的有效,如果其中包括L参数则始终视-noleaf为启用状态
注:使用L参数搜索时软连接视为本体,其属性与连接文件/文件夹无关。使用H/P参数时,软连接属性表现为连接属性,与本体无关。
注:使用L参数时,-lname与-ilname总返回“否”值
举例说明:
首先在/home/kali/Documents中新建文件夹 ./test0/instance 和 ./test0/reports,并在其中新建文件test.txt
mkdir -p /home/kali/Documents/test0/{instance,reports}
touch test.txt
然后利用ln命令在./instance中创建./reports的软链接
ln -s /home/kali/Documents/test0/reports /home/kali/Documents/test0/instance/reports
执行搜索可获得如下结果:
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -H ./instance/reports -name test.txt
./instance/reports/test.txt
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -L ./instance/reports -name test.txt
./instance/reports/test.txt
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -P ./instance/reports -name test.txt
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -H ./ -name test.txt
./reports/test.txt
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -L ./ -name test.txt
./instance/reports/test.txt
./reports/test.txt
┌──(kali㉿kali)-[~/Documents/test0]
└─$ find -P ./ -name test.txt
./reports/test.txt
对比可以看出若不在[路径组]中指明./instance/reports这个软连接-H则无法搜索到./instance下的结果,-L可以搜索到路径下包括软连接在内的结果,-P则无法搜索到任何软连接下的结果。
路径组
路径组为被搜寻的路径,要搜寻多个路径时用空格隔开,如find -L ./reports ./instance -name test.txt
即为在目录./reports和./instance中搜寻名为test.txt的文件。
表达式组
表达式组中对具体如何寻找文件以及找到文件后所进行的操作进行了设定。
操作符
当存在需要表达式实现有逻辑关系的搜寻或执行时就可能会用到操作符。常用的操作符有-a
(和)和-o
(或),例如sudo find / -iname '*.jpeg' -o -iname '*.jpg'
即为搜索电脑中全部的jpeg(jpg)格式的文件。
位置选项
位置选项仅会作用于后续的表达式,且如果没有被控制的目标表达式则不会对结果造成影响。
- -daystart 将-amin, -mmin, -cmin, -atime, -mtime, -ctime对今天的定义从24小时前到现在更改为今日0点到现在
- -follow 已作废,请使用前置参数-L
- -regextype 更改-regex与-iregex所识别的正则表达式格式,使用
find -regextype help
查看所支持的格式 - -warn, -nowarn 开关警告信息,默认打开
全局选项
全局选项作用于前后所有的表达式,但一般紧跟在路径组后。
- -d 以从文件夹内部到外部为顺序执行搜索操作(在某些不兼容-depth的系统中使用)
- -depth 以从文件夹内部到外部为顺序执行搜索操作
- -help, --help 输出find的帮助文件
- -ignore_readdir_race 若从文件名被读取到文件属性被读取这段时间内文件发生更改不报错;同时此项处于激活状态时-delete指令会忽略错误
- -noignore_readdir_race 关闭-ignore_readdir_race的效果
- -maxdepth 不对多于此层及的文件夹执行搜索操作,例如
find ./reports -maxdepth 0 -name test.txt
没有结果,find ./reports -maxdepth 1 -name test.txt
有结果,因为maxdepth 0表示仅有./reports文件夹本身,不包括其内容 - -mindepth 不对少于此层级的文件夹执行搜索操作,例如
find ./reports -mindepth 1 -name test.txt
表示仅排除./reports文件夹本身,因此有结果,而find ./reports -mindepth 2 -name test.txt
表示同时排除下一层级,故没有结果 - -noleaf 主要用于非Unix文件系统,不以文件夹中子文件夹数目较硬链接数目少2为假设进行优化
- -version, --version 输出当前版本信息
- -xdev 不进入其他文件系统的文件夹
- -mount 不进入其他文件系统的文件夹(某些版本的find无法使用xdev而使用mount)
搜索指令
搜索指令定义了搜索规则,部分搜索指令可以对比待搜索文件与参考文件。对于需要数字参数的指令,使用+n
表示大于n,-n
表示小于n,n
表示恰好等于n,如find ./ -mtime +5
表示搜索当前目录中修改时间大于5*24小时的文件。
- -amin n 检索最后访问时间大于/小于/等于n分钟的文件,如
find ./ -amin +5
表示搜索当前目录中访问时间大于5分钟的文件 - -atime n 检索最后访问时间大于/小于/等于n*24小时的文件,如
find ./ -atime 5
表示搜索当前目录中访问时间距今恰在第5个24小时到第6个24小时的文件 - -anewer reference 检索最后访问时间小于参考文件最后修改时间的文件,若H/L前置参数被激活,且参考文件为软连接,则将被连接的源文件最后修改时间视为参考,如
find ./ -anewer ./test.txt
表示搜索当前目录中最后访问时间小于比./test.txt文件最后修改时间的文件 - -cmin, -ctime, -cnewer与-a类似,但检索的时间为文件状态变更时间而非访问时间,如
find ./ -cmin +5
表示检索当前目录中文件状态变更时间大于5分钟的文件 - -mmin, -mtime, -mnewer与-a类似,但检索的时间为文件修改时间而非访问时间,如
find ./ -mmin +5
表示检索当前目录中修改时间大于5分钟的文件 - -empty 检索空的文件/文件夹,如
find ./ -empty
表示搜索当前目录中的空文件/文件夹 - -executable 检索当前用户可执行的文件及可搜索的文件夹,但并不保证结果可执行或可搜索,且
-perm
检索指令失效 - -false 始终返回“否”值
- -fstype type 检索特定文件系统的文件,如
find ./ -fstype ext4
表示搜寻当前目录下文件系统为ext4的文件;使用find ./ -printf %F
打印当前目录中所有的文件系统 - -gid n 按组ID检索文件,如
find ./ -gid 1000
表示搜寻当前目录下组ID为1000的文件 - -group gname 按组名检索文件,可以使用在gname处输入gid也可
- -ilname iname inum ipath iregex iwholename
- -link n 检索存在大于/小于/等于n个硬链接的文件
- -lname pattern 检索内容符合Shell表达式的软链接,超文本中的“/”和“.”会正常匹配,若使用了L前置参数或-follow则除非检索到的软链接失效否则返回“否”值
- -ilname pattern 对大小写不敏感的lname命令
- -name pattern 检索文件名符合表达式的文件,若没有对环境变量POSIXLY_CORRECT进行设置则对包含“/”的表达式会始终返回空结果,