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 18:44
下一篇 2015-03-19 21:34

相关推荐

  • 第六周 N21 总有刁民想害朕

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;    %s/\(^[[:space:]]\)/#\1/ 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.…

    Linux干货 2016-08-08
  • httpd服务归纳:httpd基本配置(配置文件格式以及常用选项)

    一、 httpd文件的基本格式 主配置文件位置, /etc/httpd/conf/httpd.conf    1. 配置文件参数格式  配置参数    值       特点:    &nbs…

    Linux干货 2015-05-13
  • Nginx及其相关配置详解(一)

    Nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资…

    2017-06-22
  • Linux文本处理工具和正则表达式

    概述:     Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常…

    Linux干货 2016-08-07
  • 路由实验

    实验需求 使用两台Linux主机充当路由器,配置路由条目,让两台PC机互通 1.将两台Linux主机添加两块虚拟网卡 2.配置R1路由器网络属性     3.配置R1路由器网络属性     4.配置PC1主机IP地址(Linux主机) 5.配置PC2主机的IP地址(Windows) 6.测试,PC1和PC2可以互通,之…

    Linux干货 2016-09-09
  • 磁盘阵列RAID

    磁盘阵列RAID 什么是RAID RAID的全称是Redundant Array of Inexpensive Disks 可以释义为 廉价磁盘冗余阵列,后来的RAID里的字母I被认为是Independent,即独立的磁盘冗余阵列。 RAID的作用 由于服务器中磁盘读写率太大,所以磁盘经常损坏,raid可以让坏了一块磁盘时,服务器不至于岩机。当然这只是其中的…

    Linux干货 2017-06-18

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