find命令 H、L、P、D、O参数

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进行设置则对包含“/”的表达式会始终返回空结果,
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值