find使用详解

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

文件查找分为实时查找和非实时查找。

    非实时查找是根据索引来进行查找;虽然非实时查找查询速度快,但在构建索引时相当占用资源,只有在系统空闲时才能进行,这样有可能会造成索引内容与当前系统中文件的状态不一致的情况,所以查找结果有可能会不准确。

    locate属于非实时查找命令,此命令进行模糊查找,所以查找结果并不一定与期望结果一致,如下图:

        find使用详解

            查询文件名为man5的文件,结果包括重复的目录名man5。

        可以使用update命令来手动更新索引内容。

    实时查找要遍历所有文件进行条件匹配,所以速度会比较慢,但查找结果精确。

        find命令为实时查找命令,下面主要来介绍find的用法。

find使用方法:

    find命令会遍历指定目录中的所有文件来完成查找。

    格式:

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

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

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

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

    查找条件:

        –name ‘FILENAME’:文件名作精确匹配,支持使用通配符。

             find使用详解

            *:任意长度的任意字符

                find使用详解

            ?:任意单个字符

                find使用详解

            []:指定范围内的任意单个字符

                 find使用详解

            [^]:不包含指定范围内的任意字符

                find使用详解

        -iname ‘FILENAME’:文件名匹配时忽略大小写

            find使用详解

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

            正则表达式要求必须全路径匹配,如下图第一个查找只给出了文件名,没有找到结果;第二个查找给出了完整的查找路径才显示出了结果。

                find使用详解

             如果是多路径查找可以在路径处做匹配即可,如下图:

                find使用详解

        -iregex:正则表达式匹配的结果中忽略大小写

                find使用详解

        -user USERNAME:根据属主查找

            find使用详解            

        -group GROUPNAME:根据属组查找

             find使用详解        

        -uid UID:根据UID查找

            find使用详解

        -gid GID:根据GID查找

            find使用详解

        -nouser:查找没有属主的用户

            find使用详解

                将rrt用户删除后,宿主目录下的属于rrt的文件都变成了无属主文件

        -nogroup:查找没有属组的用户

        -type:根据文件类型查找

            f:普通文件

            d:目录

            c:字符文件

            b:块设备    

            s:套接字文件

            p:命名管道

                find使用详解

        -size [+|-]#UNIT:根据文件大小查找,默认为字节

            常用单位:K,M,G

            因为bash不支持浮点数,所以带有小数的文件大小会自动进位,如果查找大小为3k的文件,那么大小范围为2k-3k之间的文件都会显示出来,而小于3k的文件范围为小于等于2k.

            #UNIT:#-1 < x <=#

            -#UNIT:x<=#-1

            +#UNIT:x>#

            find使用详解

                上例中查找的结果中文件大小都在9k-10k之间

            find使用详解

                上例中查找结果都是大于10k的目录

            find使用详解

                上例中的结果都是小于9k的文件。

    组合条件

        -a:与

        -o:或

        -not:非

                find使用详解

                上例中查找/home下属于用户rot的目录

        两个条件没有指定逻辑关系时,默认使用“与”

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

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

                例如: -not \(iname “*r*” -o -user ben \)     表示文件名中不包含r且忽略大小写,并且属主不是ben的文件

    根据时间戳查找:

        以“天”为单位:

            -mtime:文件内容修改时间

            -ctime:元数据改变时间

            -atime:访问时间

                [+|-] #

                    -atime +5:代表最后一次访问时间大于等于6天前

                    -atime 5:代表最后一次访问时间在5-6那一天

                    -atime -5:代表最后一次访问时间小于等于5天内     

                  

            

                    find使用详解

     例如:当前有四个文件分别为a,b,c,d,最后访问时间如下所示:

               a   2015-03-17 02:51:37
                  b   2015-03-15 15:00:00
                  c   2015-03-10 15:00:00
                  d   2015-03-13 15:00:00

        假如文件a的时间为当前时间,则其它三个文件的时间与a文件相差的天数分别为:b,2天,c,7天,d,4天

            find使用详解

            上例中当atime=1时所查找的区间为1-2天之间的文件,结果为文件b;atime=-1时查找1天以的文件,结果为文件a;atime=+1时查找大于2天的文件,结果为文件c和文件d。

            下图分别查找2天和3天的不同情况,可以结合上面的图示时间表来进行分析

            find使用详解

            find使用详解

        以“分钟”为单位

            -mmin

            -cmin

            -amin

            用法上面的情况相同,不再详细说明。

根据权限查找

    -perm [/|+|-] MODE 根据权限查找

        mode:精确匹配

        /mode|+mode:只要有一位匹配即可

        -mode:必须包含整个mode才能显示

            例如:目前当前目录中的文件的权限如下图所示

              find使用详解

            查找权限为640的文件

                find使用详解

            查找权限为包含640中任意一位的文件

                find使用详解

            查找权限中至少包含640的文件

                find使用详解

    处理动作:

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

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

        -ok COMMAND {} \;:每一次操作都需要确认

        -exec COMMAND {} \;:执行命令时不需要确认

            find使用详解

            find使用详解

            find使用详解

    find一次查找符合条件的所有文件,并一同传递给-ok或-exec后面的命令,但有些命令不能接受过长的参数,此时可以采用下面这种方式来解决:

        find | xargs COMMAND     此方式可以逐行处理数据

            find使用详解

            

        

原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/1081

(0)
上一篇 2015-03-18 18:44
下一篇 2015-03-19 21:34

相关推荐

  • shell脚本变成之数组、字符串处理及其它功能补充

    数组定义:                  能够存储多个元素的内存空间,每个元素在数组中具有特定的索引编号,我们可以通过变量名和索引编号来查看数组中的某一元素。    &nbsp…

    Linux干货 2016-08-24
  • Linux用户及权限管理

    Linux用户及权限管理 当我们用ls -al查看一个文件的详细信息的时候会显示出一个有七个字段的文件详细信息,现在我们来了解下这七个字段各自代表的意义 drwxr-xr-x 18 root root 4096 12月 16 15:25 .config 我们先来说明这七段分别表示什么每个字段我们用 | 隔开 drwxr-xr-x | 18 | root | …

    Linux干货 2016-12-19
  • Linux bash中的命令行展开介绍及应用示例

    Linux bash中的命令行展开介绍及应用示例 在Linux bash中可以使用命令行展开特性一步完成需要分开成多步完成的操作,达到事半功倍的效果。在Linux指令参数位置使用"{}" 将相应的参数括起来,括号中的参数以逗号分隔,然后bash在执行这一指令时会自动将括号中的内容进行展开。 相关示例如下: 同时创建多个目录,在/tmp目录…

    Linux干货 2016-11-07
  • 15 权限管理及作业

    15 权限管理及作业(作业单独一篇) 一、杂项知识整理 1、访问控制列表:ACL:Access Control List,实现灵活的权限管理。     除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。     centos7.0之后默认创建的ext4文件系统有ACL功…

    Linux干货 2016-08-04
  • gzip压缩输出

    一、gzip介绍          gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序,也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公开发布,版本号是0.1,目前的稳定版本是…

    Linux干货 2015-07-29
  • 正则表达式及用户管理命令

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当做其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxuser.txt文件中。 6、列出/etc目录…

    2017-10-10

评论列表(3条)

  • stanley
    stanley 2015-03-18 18:53

    文章代码多使用编辑器会使文章整体更专业美关,另: 请标签的添加会使文章的SEO成功率大大提高,

    • petmaster
      petmaster 2015-03-19 11:28

      @stanley好的,谢谢!
      以后会注意优化

  • Linux_love
    Linux_love 2015-03-28 17:46

    mark