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)
petmasterpetmaster
上一篇 2015-03-18
下一篇 2015-03-19

相关推荐

  • shell,系统启动和内核管理

    shell中的for和while循环,Linux的组成,系统启动的步骤,以及内核的管理

    2017-12-21
  • 修改Linux命令终端提示符

    作业1. 设置自己的终端提示符,要求字符终端登录时:     a> 需要带颜色     b> 需要显示当前执行到了第几条命令     c> 显示当前登录终端,主机名和当前时间     这可以通…

    Linux干货 2016-10-17
  • 第九周-Shell脚本编程

      1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash nologin=0 login=0 for i in `cut -d : -f 7 /etc/passwd`;do if [ $i = /sbin/n…

    Linux干货 2017-08-23
  • 计算机基础

    一,计算机的组成        计算机由硬件(hardware)系统和软件(software)系统两大部分组成的         硬件系统是由主机和外部设备 二,计算机硬件 计算机: 是一种能接受和存储信息,并按照存储在其内部的程序对海量数据进行自动,高速地 处理, 然后把 处理的结果输出的现代化智能电子设备  发展历史       第一代计算机(1946-…

    Linux干货 2018-03-26
  • 系统日志和loganalyzer

    作为运维人员,熟悉系统日志是一项基本功。本文将介绍centos6的系统日志rsyslog及loganalyzer工具。 简介 系统日志:记录历史事件,通常都是按时间顺序将发生的事件予以记录,linux上的日志分为syslogd(系统进程相关日志)和klogd(内核事件日志) centos5:syslog    缺点:不能进行并行数据存储,…

    Linux干货 2016-03-20
  • N25第四周总结

    linux bassic Week 4 Blogging 1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel/   /home/tuser1/ ~]# chmod&n…

    Linux干货 2016-12-26

评论列表(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