Loading... <p> <span style="font-size:16px">文件查找是根据文件的各种属性去找到相对应的文件。</span> </p> <p> <span style="font-size:16px">文件查找分为实时查找和非实时查找。</span> </p> <p> <span style="font-size:16px"> 非实时查找是根据索引来进行查找;虽然非实时查找查询速度快,但在构建索引时相当占用资源,只有在系统空闲时才能进行,这样有可能会造成索引内容与当前系统中文件的状态不一致的情况,所以查找结果有可能会不准确。</span> </p> <p> <span style="font-size:16px"> locate属于非实时查找命令,此命令进行模糊查找,所以查找结果并不一定与期望结果一致,如下图:</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-56.png" /> </p> <p> <span style="font-size:16px"> 查询文件名为man5的文件,结果包括重复的目录名man5。</span> </p> <p> <span style="font-size:16px"> 可以使用update命令来手动更新索引内容。</span> </p> <p> <span style="font-size:16px"> 实时查找要遍历所有文件进行条件匹配,所以速度会比较慢,但查找结果精确。</span> </p> <p> <span style="font-size:16px"> find命令为实时查找命令,下面主要来介绍find的用法。</span> </p> <p> <span style="font-size:16px">find使用方法:</span> </p> <p> <span style="font-size:16px"> find命令会遍历指定目录中的所有文件来完成查找。</span> </p> <p> <span style="font-size:16px"> 格式:</span> </p> <p> <span style="font-size:16px"> find [option]…[查找路径][查找条件][处理动作]</span> </p> <p> <span style="font-size:16px"> 查找路径:默认为当前目录</span> </p> <p> <span style="font-size:16px"> 查找条件:默认为指定路径下的所有文件</span> </p> <p> <span style="font-size:16px"> 处理动作:默认为显示至屏幕</span> </p> <p> <span style="font-size:16px"> 查找条件:</span> </p> <p> <span style="font-size:16px"> <strong> –</strong><strong>name ‘FILENAME’:文件名作精确匹配,支持使用通配符。</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-29.png" /> </p> <p> <span style="font-size:16px"> <strong> *:任意长度的任意字符</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-97.png" /> </p> <p> <span style="font-size:16px"> <strong> ?:任意单个字符</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-43.png" /> </p> <p> <span style="font-size:16px"> <strong> []:指定范围内的任意单个字符</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-29-1.png" /> </p> <p> <span style="font-size:16px"> <strong>[^]:不包含指定范围内的任意字符</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-96.png" /> </p> <p> <span style="font-size:16px"> <strong> -iname ‘FILENAME’:文件名匹配时忽略大小写</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-70.png" /> </p> <p> <span style="font-size:16px"> <strong>-regex pattern:基于正则表达式进行文件名匹配。</strong></span> </p> <p> <span style="font-size:16px"> 正则表达式要求必须全路径匹配,如下图第一个查找只给出了文件名,没有找到结果;第二个查找给出了完整的查找路径才显示出了结果。</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-96-1.png" /> </p> <p> <span style="font-size:16px"> 如果是多路径查找可以在路径处做匹配即可,如下图:</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-55.png" /> </p> <p> <span style="font-size:16px"> <strong>-iregex:正则表达式匹配的结果中忽略大小写</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-55-1.png" /> </p> <p> <span style="font-size:16px"> <strong> -user USERNAME:根据属主查找</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-92.png" width="636" height="157" /><span style="font-size:16px"> </span> </p> <p> <span style="font-size:16px"> <strong>-group GROUPNAME:根据属组查找</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-26.png" width="711" height="116" /><span style="font-size:16px"> </span> </p> <p> <span style="font-size:16px"> <strong>-uid UID:根据UID查找</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-10.png" /> </p> <p> <span style="font-size:16px"> <strong>-gid GID:根据GID查找</strong></span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-60.png" /> </p> <p> <span style="font-size:16px"> <strong> -nouser:查找没有属主的用户</strong></span> </p> <p> <span style="font-size:16px"> </span><img style="width:649px;height:94px" alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-47.png" width="594" height="82" /> </p> <p> <span style="font-size:16px"> 将rrt用户删除后,宿主目录下的属于rrt的文件都变成了无属主文件</span> </p> <p> <span style="font-size:16px"> <strong> -nogroup:查找没有属组的用户</strong></span> </p> <p> <span style="font-size:16px"> <strong> -type:根据文件类型查找</strong></span> </p> <p> <span style="font-size:16px"> f:普通文件</span> </p> <p> <span style="font-size:16px"> d:目录</span> </p> <p> <span style="font-size:16px"> c:字符文件</span> </p> <p> <span style="font-size:16px"> b:块设备 </span> </p> <p> <span style="font-size:16px"> s:套接字文件</span> </p> <p> <span style="font-size:16px"> p:命名管道</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-33.png" /> </p> <p> <span style="font-size:16px"> <strong> -size [+|-]#UNIT:根据文件大小查找,默认为字节</strong></span> </p> <p> <span style="font-size:16px"> 常用单位:K,M,G</span> </p> <p> <span style="font-size:16px"> 因为bash不支持浮点数,所以带有小数的文件大小会自动进位,如果查找大小为3k的文件,那么大小范围为2k-3k之间的文件都会显示出来,而小于3k的文件范围为小于等于2k.</span> </p> <p> <span style="font-size:16px"> #UNIT:#-1 < x <=#</span> </p> <p> <span style="font-size:16px"> -#UNIT:x<=#-1</span> </p> <p> <span style="font-size:16px"> +#UNIT:x>#</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-66.png" /> </p> <p> <span style="font-size:16px"> 上例中查找的结果中文件大小都在9k-10k之间</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-92-1.png" /> </p> <p> <span style="font-size:16px"> 上例中查找结果都是大于10k的目录</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-12.png" /> </p> <p> <span style="font-size:16px"> 上例中的结果都是小于9k的文件。</span> </p> <p> <span style="font-size:16px"><strong> 组合条件</strong></span> </p> <p> <span style="font-size:16px"> -a:与</span> </p> <p> <span style="font-size:16px"> -o:或</span> </p> <p> <span style="font-size:16px"> -not:非</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="//cto.wang/usr/uploads/2016/07/20160703155818-52.png" /> </p> <p> <span style="font-size:16px"> 上例中查找/home下属于用户rot的目录</span> </p> <p> <span style="font-size:16px"> 两个条件没有指定逻辑关系时,默认使用“与”</span> </p> <p> <span style="font-size:16px"> -not A -a -not B = -not(A -o B)</span> </p> <p> <span style="font-size:16px"> -not A -o -not B = -not(A -a B)</span> </p> <p> <span style="font-size:16px"> 例如: -not \(iname “*r*” -o -user ben \) 表示文件名中不包含r且忽略大小写,并且属主不是ben的文件</span> </p> <p> <span style="font-size:16px"> <strong> 根据时间戳查找:</strong></span> </p> <p> <span style="font-size:16px"> 以“天”为单位:</span> </p> <p> <span style="font-size:16px"> -mtime:文件内容修改时间</span> </p> <p> <span style="font-size:16px"> -ctime:元数据改变时间</span> </p> <p> <span style="font-size:16px"> -atime:访问时间</span> </p> <p> <span style="font-size:16px"> [+|-] #</span> </p> <p> <span style="font-size:16px"> -atime +5:代表最后一次访问时间大于等于6天前</span> </p> <p> <span style="font-size:16px"> -atime 5:代表最后一次访问时间在5-6那一天</span> </p> <p> <span style="font-size:16px"> -atime -5:代表最后一次访问时间小于等于5天内 </span> </p> <p> <span style="font-size:16px"> </span> </p> <p> <span style="font-size:16px"> </span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="/upload/dxp3ojnjdpz.png" /> </p> <p> <span style="font-size:16px"> 例如:当前有四个文件分别为a,b,c,d,最后访问时间如下所示:</span> </p> <p> <span style="font-size:16px"> a</span><span style="font-size:16px"> 2015-03-17 02:51:37</span><br /> <span style="font-size:16px"> b 2015-03-15 15:00:00</span><br /> <span style="font-size:16px"> c 2015-03-10 15:00:00</span><br /> <span style="font-size:16px"> d 2015-03-13 15:00:00</span> </p> <p> <span style="font-size:16px"> 假如文件a的时间为当前时间,则其它三个文件的时间与a文件相差的天数分别为:b,2天,c,7天,d,4天</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="/upload/ocfjsvral30.png" /> </p> <p> <span style="font-size:16px"> 上例中当atime=1时所查找的区间为1-2天之间的文件,结果为文件b;atime=-1时查找1天以的文件,结果为文件a;atime=+1时查找大于2天的文件,结果为文件c和文件d。</span> </p> <p> <span style="font-size:16px"> 下图分别查找2天和3天的不同情况,可以结合上面的图示时间表来进行分析</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="/upload/3byeolxxtrc.png" /> </p> <p> <span style="font-size:16px"> </span><img alt="" src="/upload/n2dkxkeu54z.png" /> </p> <p> <span style="font-size:16px"> 以“分钟”为单位</span> </p> <p> <span style="font-size:16px"> -mmin</span> </p> <p> <span style="font-size:16px"> -cmin</span> </p> <p> <span style="font-size:16px"> -amin</span> </p> <p> <span style="font-size:16px"> 用法上面的情况相同,不再详细说明。</span> </p> <p> <span style="font-size:16px"><strong>根据权限查找</strong></span> </p> <p> <span style="font-size:16px"> -perm [/|+|-] MODE 根据权限查找</span> </p> <p> <span style="font-size:16px"> mode:精确匹配</span> </p> <p> <span style="font-size:16px"> /mode|+mode:只要有一位匹配即可</span> </p> <p> <span style="font-size:16px"> -mode:必须包含整个mode才能显示</span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> 例如:目前当前目录中的文件的权限如下图所示</span> </p> <p> <span style="font-size:16px"> </span><img alt="" src="/upload/tq3rpbc3hos.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> 查找权限为640的文件</span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/z4qz2r20syl.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> 查找权限为包含</span><span style="font-size:16px">640中任意一位的文件</span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/wysjys2pvzu.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> 查找权限中至少</span><span style="font-size:16px">包含640的文件</span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/ck4l0zel2x1.png" /> </p> <p> <span style="font-size:16px"> 处理动作:</span> </p> <p> <span style="font-size:16px"> -print:默认处理动作,显示</span> </p> <p> <span style="font-size:16px"> -ls:类似ls -l的形式显示每一个文件的详细信息</span> </p> <p> <span style="font-size:16px"> -ok COMMAND {} \;:每一次操作都需要确认</span> </p> <p> <span style="font-size:16px"> -exec COMMAND {} \;:执行命令时不需要确认</span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/or0vwsorsw2.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/sttmngdq3a2.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/b4hbryvvho3.png" /> </p> <p> <span style="font-size:16px"> find一次查找符合条件的所有文件,并一同传递给-ok或-exec后面的命令,但有些命令不能接受过长的参数,此时可以采用下面这种方式来解决:</span> </p> <p> <span style="font-size:16px"><span style="font-size:16px"> find | xar</span><span style="font-size:16px">gs COMMAND 此方式可以逐行处理数据</span></span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span><img alt="" src="/upload/vvwfjms4gwg.png" /> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span><span style="font-size:16px"> </span> </p> <p> <span style="font-size:16px"> </span><span style="font-size:16px"> </span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信