文件查找 locate,find ,-exec,-ok,-xargs。

在文件系统上查找符合条件的文件(不是文本文件的内容):

 实现工具:locate,find。


locate:

查询速度快, 模糊查找,非实时的查找(不能反映出当前系统是否有此文件,因为从数据库里查找)。

locate:根据事先构建的索引库(数据库)来进行文件查找。

        系统自动更新系统库(周期性更新),数据库不能精确反应当前存在的系统文件,比如刚新建一个文件,系统还没有 进 行更新,则可能查找的时候,就查找不到此文件。

             updatedb  手动更新数据库,但是手动更新数据库特别消耗资源。

             locate -b 只匹配路径中的基名。 

             locate -c 统计出有多少个符合条件的文件。

             locate -r 可以使用基本正则表达式进行查找。


  find:

不依赖于任何数据库文件,通过遍历指定起始路径下文件系统层级结构完成文件查找,实时查询 。

查找速度慢,精确查找,实时查询。

用法:

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

        查找起始路径:指定搜索目标起始路径;默认为当前目录。

        查找条件:指定的查找标准,可以根据文件名,大小,类型,从属关系,权限等标准进行。默认找出指定路径下的所有 文件。

          处理动作:对符合查找条件的文件做出的操作,例如,删除等操作,默认输出至标准输出。

 

匹配标准:

           -name  “pattern“    示例:[root@localhost ~]# find /etc/ -name "passwd"  对文件名进行精确匹配。 

            -iname “pattern“    但是匹配时是不区分大小写的    示例:[root@localhost ~]# find /etc/ -name "passwd"  

             支持glob风格的通配符。*,?,[],[^]

             -regex pattern    基于正则表达式,来进行文件名匹配。


    根据文件的属主来查找。

                -user  USERNAME:查找属主指定用户的所有文件。

                -group  group:查找属组指定组的所有文件。[root@localhost ~]# find /tmp/ -group root

                 -uid UID:查找属主指定UID的所有文件。 一个用户被删除后,此前所有属于这个用户的文件的属主就是这个用户此前的ID号。

                 -gid GID:查找属组指定的GID的所有文件。

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

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

    根据文件的类型查找:

                  -type:TYPE:

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

  

    根据文件大小来查找:

                  -size

                  [+|-]#k,大于多少k,小于多少K。

                  [root@localhost ~]# find /etc -size +1M -ls  寻找大于1M的文件。

    组合条件,同时满足多个条件。 

                  与:-a 。默认组合逻辑, 

                  或:-o     

                  非:-not

                 [root@localhost ~]# find /tmp -user root -a -type d -ls     查找tmp下属主为root,类型是d的文件。
                 [root@localhost ~]# find /tmp -user root -a -not -type d -ls    查找tmp下属主为root,类型不是d的文件。
                 [root@localhost test]# find ./ -not -user user1 -a -not -user user2 -ls    查找属主不是user1和user2的文件。

                 [root@localhost test]# find ./ -not -user user1 -o -not -type d 属主不是user1或者类型不是目录的文件。

 

    根据文件的时间戳查找:
                -mtime 修改时间

                -ctime  改变时间

                -atime 访问时间

                -5 0-5天, +5:5天以前都算。 5:5天以前,5天之内没有记录。

                 -mmin,cmin,amin,多少分钟。

 

    根据文件的权限进行查找

                 -perm MODE   

                  find ./ -perm 644  权限的3个数必须精确匹配。

                  find ./ -perm +644 权限的3个数,任意一位的权限大于644就可以。

                  find ./ -perm -644  权限大于644的都可以。

运作:

                   -print:显示

                    -ls:类似ls -l 显示每一个文件的详细信息。

                    -ok COMMAND { } \;           查找到文件,希望在这个查找的文件上执行其它命令。此处{ }做为文件名(find查找出来的文件名称)称占位符。

                    -exec COMMAND { } \; 

                    -ok和-exec的区别:-ok的每一个操作都需要用户确认。有交互进程。

                    [root@localhost test]# find ./ -perm -006 -exec chmod o-w {} \;  找见其它用户有写权限的文件,之后把它的其它用户的W权限去除。
                     [root@localhost test]# find ./ -type d -ok chmod +x {} \;   找到类型是目录的文件,让他的属主,属组,其它用户的权限都有x的权限。

                     [root@localhost test]# find ./ -perm -020 -exec mv {} {}.new \;  找到属组有x权限的文件,将文件名在原有文件的后面加上.new。

                     [root@localhost ~]# find ./ -name "*.sh" -a -perm -111 -exec chmod 0-x {} \;    找到名称以.sh结尾的,所有用户都有执行权限的,将其它用户的执行权限去掉。
 


             练习:

                1./tmp目录下属主为非root的所有文件。

                 [root@localhost ~]# find /tmp -not -user root -ls

                2./tmp目录下文件名中不包含fstab字符串的文件。

                [root@localhost ~]# find /tmp -not -iname *fstab -ls

                3./tmp目录下属主为非root,而且文件名不包含fstab字符串的文件。 

               root@localhost ~]# find /tmp -not -user root -a -not -iname *fstab -ls

   根据文件大小查找:

           -size[+·-]#UNIT                        常用单位:K,M,G。

              UNIT的取值(大于UNIT-1,小于等于UNIT)

             - UNIT的取值0 到UNIT-1的区间。

             +UNIT的取值UNIT到无穷大。

   根据时间戳查找:

            以天为单位:

           -atime:[+|-]

           -mtime      -ctime

            以分钟为单位:


    find命令需要执行额外的命令,可以使用-exec,-ok,-xargs。
    xargs:

             [root@localhost ~]# find /etc -size +1M | xargs echo {} >> /tmp/etc.largefiles

             [root@localhost ~]# find /etc -size +1M | xargs echo {} >> /tmp/etc.largefiles \;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值