Linux文件查找之find命令

时间:2022-11-17 09:19:31

    之前介绍过grep和egrep文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行现在要为大家介绍的是常用的文件查找工具find命令

      

1. 文件查找概述

           根据文件的各种属性去找到相对应文件

          文件查找:locate, find

          实时查找:遍历所有文件进行条件匹配

          非实时查找:根据索引查找

 

        locate: 非实时查找

       依赖于索引,而索引构建相当占用资源;索引的创建是在系统空闲时由系统自动进行(每天任务);手动进行使用updatedb命令;

         查找速度快

         非精准查找

         模糊查找

 

        find: 实时查找

           精准查找

           速度慢


2. find命令详解

     2.1 命令格式

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

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

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

           处理动作:默认为显示至屏幕

 

    2.2 条件查找

           -name "文件名称":支持使用globbing字符

                 *:

                 ?:

                 []:

                 [^]:

 

             Eg:find -name"*.pl"

              ./pp/1.pl

              ./pp/3.pl

              ./pp/2.pl

             ./a.pl

 

            # find -name *.pl

             ./a.pl

 

    注意:如果用引号引起来,那么就成了递归。如果不用引号,那么就不是递归

   

     

      -iname "文件名称":查找时忽略字符大小写

 

      -user USERNAME: 根据文件的属主查找

      -group GRPNAME: 根据文件的属组查找

 

      -uid UID: 根据文件的属主id查找

      -gid GID: 根据文件的属主id查找

 

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

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


2.3 组合条件查找

        与:-a, 同时满足

      或:-o, 满足一个即可

      非:-not, !,条件取反


      eg: 

      find ./  �Ciname “*s” -not �Cusergentoo �Cls

      find ./  -not  -iname“*s” -not �Cuser gentoo 

      多个not直接跟ls会有歧义

      ls -l  ` find ./  -not �Ciname “*s”  -not -user gentoo`

 

   例子:-not \( -iname "*r* -o -user gentoo \)

     -iname "*r* -o -user gentoo要和前后的\)有空格

      

       -not A -a -not B= -not ( A -o B ) 

      //not提取到前面要将-o或者-a反转

       -not A -o -not B= -not ( A -a B )



2.4 文件类型查找

-type TYPE  

                 f: 普通文件

                 d: 目录文件

                 l: 符号链接

                 b: 块设备

                 c: 字符设备

                 s: 套接字文件

                 p: 命名管道

 

     -size [+|-]#UNIT:根据文件大小去查找

     常用单位: k, M, G

     -#UNIT: x <= #-1           

     #UNIT: #-1 < x <= #   

     +#UNIT: x > #


 

    Eg: find / -size -2k  查找文件大小小于等于1k字节的文件

     find / -size 2k  查找文件大小大于等于1k字节,小于2k的文件

     find / -size +2k   找文件大小大于2k字节的文件


2.5 根据时间戳查找

      以“天”为单位

          -atime[+|-]#

          -#x < #    #天之内

          #: # <= x <#+1  #天和#+1天之间

  +#x >= #+1   #+1天以前被访问

          -mtime

          -ctime

 

      以“分钟”为单位

          -amin

          -mmin

          -cmin



2.6 根据权限查找

        -perm [+|-]MODE

        MODE: MODE精确匹配

        find./ -perm 644

       +MODE: 任何一类用户的权限只要能包含对其指定的任何一位权限即可(9位有一位重合即可);以属主为例,

         find./ -perm +222  

        -MODE:每类用户指定的检查权限都匹配:    

        为三类用户所有指定的检查权限都能够被包含

        find./ -perm -222



 

2.7 处理动作

        -print: 默认处理动作,显示

        -ls:类似于ls -l

        -exec COMMAND {} \;  //  {}\;要隔开

        -ok COMMAND {} \;  //交互式的,执行时会进行确认

 

        eg:find ./ -perm 002 -exec chmod o-w {} \;

           find ./ -perm +200 �Ca �Ctype �Ca�Cnot �Cname “*” �Cexec ls �Cl {} \;

           find ./ -perm +200 �Ca �Ctype �Ca�Cnot �Cname “*” �Cexec mv {} {}.txt \;

 

        find: 一次性查找符合条件的所有文件,并一同传递给给-exec-ok后面指定的命令;但,有些命令不能接受过长的参数;此时使用另一种方式

 

        find | xargsCOMMAND