文件查找利器之find命令

简介:

一、find简介

   find命令是linux系统下一个强大的文件查找命令,它可以根据你所指定的文件大小、权限,属主、属组、修改时间、访问时间等条件查到你想要得到的东西。

   谈到find,有人可能就会与grep命令纠结一会儿,grep命令主要是文本内容查找,在文件范围内找符合条件的文本;而find命令则是在系统范围内找符合条件的文件,它不关心文件的内容,只关心文件是否存在。所以,find是针对文件的而grep是针对文本内容的。grep另一种用法就是使用管道命令来接收前一个命令的输出来做为自己的输入,这则是用来匹配字符串的。

二、find命令语法结构

   find [查找路径] [查找条件] [处理动作]

   查找路径:默认为当前目录

   查找条件:默认为查找指定路径下的所有文件

   处理动作:默认为显示

从find命令的语法结构也可以看出,它的几个选项都是可选的,如果不选的话,则会列出当前目录下的所有文件。

三、find命令功能使用

1)查找条件

  -name 文件名称,支持使用globbing文件通配。

  -inme,查找时不区分大小写。

      *,?,[],[^],\(\)(转义)

      例:查找/usr/local下所有包含httpd的文件

wKiom1MRvpGSj4BTAAA3MWUyOk4589.png

      全用-iname选项后,就会忽略大小写,并且find会递归整个查找路径下的目录和文件。

  -user UserName:根据属主查找

  -group UserName:根据属组查找

  -nouser:查找没有属主的文件

  -nogroup:查找没有属组的文件

      例:找出/usr/local下属主是nmshuishui的文件

wKioL1MRwPLQXNI_AABkjQSzeE4873.png

  -uid UID:根据指定的UID查找

  -gid GID: 根据指定的GID查找

       既然有了根据用户名查找,为什么还要来一个UID和GID呢?如果你删除了一个账户,但是没有使用-r选项,因此你删除的账户是没有完全删干净的。

       例:查找/usr/local下属于UID508的所有文件

wKiom1MRww7ghq9-AABx2f9Ge7A293.png

2)组合条件

   -a:与,and,同时满足。多个条件与时,-a可省略

   -o:或,or

   -not,!:非,取反

   例:找出/usr/local下属主是nmshuishui且属组是root的文件

wKiom1MRxXKgYzf5AAAndMlAjcI944.png

   例:找出/usr/local/httpd下不属于root或vbird的所有文件

wKiom1MRynrAjMDmAAAqik0kIQg727.png

   上题所说的不属于root或vird实际上是指既不属于root又不属于vbird的所有文件,逻辑问题,自己理解。

3)-type

   根据文件类型查找

    f:普通文件    d:目录    b:块设备   c:字符设备   l:符号链接文件   p:命令管道   s:套接字

   例:查找/usr/local下属主是nmshuishui的目录。

wKiom1MRyA2CufOVAAAp7eX2ZaI228.png

4)-size

  根据文件大小查找

     -size [+|-]#

     常用单位:K,M,G

  这里的size就是中国移动的做法了,通话没有一分钟就是一分钟了。如果-seze 1M,就代表是大于0M大而小于1M的,-size -1M就代表是0M到0M以下的,那-size +1M就是1M以上的了,有点不符合常理。

wKiom1MR2crjOfZeAABE4iswEiA423.png

  例:找出/etc/下大于1M且文件类型为普通文件的所有文件

wKiom1MR23TyVxxoAAAxYMngNkc186.png

5)根据时间戳查找

     以天为单位(time)

         -atime[+|-]:access,访问时间                〡 +:表示(#+1)天之外被访问过

         -mtime:modify,修改时间                   →〡 -:表示(#)天之内被访问过

         -ctime:create,改变时间                    〡无:表示 # --(#+1)天的时间段被访问过

     以分钟为单位(min)

         -amin[+|]

         -mmin

         -cmin

wKiom1MR4OHzYsewAAAShpcYfOc545.png

   如上图,-2天其实就是2天之内的,2天就是2天到3天的,+2天就是3天之外的,这回应该更好理解点儿了吧。

   例:查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件。

wKioL1MR4o_wkwMaAAAW2H6EYa4933.png

6)根据权限查找

    -perm [+|-]mode

          mode:精确匹配                              无符号,精确匹配

         +mode:满足任何一类用户的任何一位权限即可       +号,或关系,范围大

         -mode:每类用户的任何一位都需匹配               -号,且关系,范围小

         说明:+mode:常用于查找某类用户的某特定权限是否存在

    例:查找/etc目录下所有用户都没有写权限的文件

            所有都没有,相反:任何一个有

            所有都有,相反:至少有一个没有

wKioL1MR5suzHEHZAABDEPehXlI952.png

    例:查找/usr/local/share/目录下至少有一类用户没有写权限(都有,取反:到少一个没有)

wKioL1MR6CrTNEynAAA34DSSjm4460.png

    例:查找/usr/local/目录下,所有用户都有执行权限且其它用户有写权限的文件

wKioL1MR6X_SdnMFAAAfJClcLGI323.png

       find /usr/local -perm -111 -a -perm -002  =  find /usr/local -perm -113

四、处理动作,默认为-print

   -print:打印在标准输出上

   -l:以长格式输出各文件信息

   find /tmp -perm -006 -ls   ls是处理动作

wKiom1MR_2CgiG-UAABeGqmHNuM078.png

   -exec COMMAND {} \;

对查找到的文件执行指定的命令({}表示占位符,表示接收来自前面的find命令所查找到的文件,并对那个文件执行相应操作.)

wKiom1MSAcKQBTtFAAA_6O0A70Q532.png

 |xargs COMMAND

wKiom1MSAjjgg9_NAAA0k8C0Kog596.png

五、-exec与|xargs COMMAND对比

find把查找到的所有文件一次性传递给-exec所指定的命令,如果同时传递的文件过多,由于参数过多,会导致命令溢出,所以为了避免这种情况发生,我们还需要使用find |xargs COMMAND 这个命令,因为这个命令是把前面命令所执行的结果当作后面命令的参数使用的,xargs是一批批接受命令,所以不会由于传递参数过多而导致溢出的结果.

既然这样,是不是我们再也不需要使用find 后面跟\;这种机制了?还要-exec干什么?因为还有一种情况是xargs所搞不定的,那就是我们要给一类文件进行统一改名.

mv `find /tmp -iname "*.doc"   XXX(*.docx?),像下例中,你使用mv能统一改吗?目标怎么命令啊?难道要来一个*.docx吗?*是什么啊?看来还是没法搞定,这样,我们的那个-exec中的{}占位符就派上用场了,前面怎么占位,后面就怎么输出,统一改名so easy。

wKioL1MSAmuyolTPAAA1OWW_5d0200.png

find /tmp -perm -664 -type f -exec chmodo+x {} \; 把前面找到的文件放到{}中,进行统一权限修改

find /tmp -perm -664 -type f |xargs chmodo+x 相当于把前面找到的文件通过管道输出给xargs作为参数,再进行统一权限修改










本文转自 nmshuishui 51CTO博客,原文链接:http://blog.51cto.com/nmshuishui/1365597,如需转载请自行联系原作者
目录
相关文章
|
API
xxl-job restful api
xxl-job restful api
465 0
|
应用服务中间件 nginx 数据安全/隐私保护
nginx中session ticket重用Session提高https性能分析
使用session ticket机制可以提高ssl握手的效率,并节约有效的服务器计算资源
16079 0
|
1月前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
953 56
|
11月前
|
缓存 NoSQL 关系型数据库
Redis与MySQL的数据一致性
在高并发环境下,保持 Redis 和 MySQL 的数据一致性是一个复杂但重要的问题。通过采用读写穿透、写穿透、分布式锁、双写一致性保障和延时双删策略,可以有效地减少数据不一致的风险,确保系统的稳定性和可靠性。通过合理的缓存策略和数据同步机制,可以显著提升系统的性能和用户体验。
539 22
|
数据库 索引
索引命名规范
本文介绍了数据库中不同类型的索引命名规则:主键索引命名为pk_字段名,唯一索引命名为uk_字段名,普通索引命名为idx_字段名。pk表示主键,uk表示唯一键,idx表示索引。
890 7
|
存储 Perl
如何使用awk处理CSV文件?
【10月更文挑战第16天】如何使用awk处理CSV文件?
486 3

热门文章

最新文章