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

相关推荐

  • nginx基本功能学习

    一、NGINX介绍: Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:            作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 …

    Linux干货 2015-12-19
  • 1017作业

    1 生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正 ##先分析硬件时间不对还是系统时间不对,如果是系统时间不对: [root@localhost ~]# hwclock -w [root@localhost ~]#  ##如果是硬件时间不对: [root@localhost ~]#…

    Linux干货 2016-10-18
  • 文本查看及处理工具

    文本查看及处理工具 wc wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数 语法 wc(选项)(参数) 选项 -c或–bytes或——chars:只显示Bytes数; -l或——lines:只显示列数; -w或——words:只显示字数。 参数 文件:需要统计的文件列表 实例 [root@localhost tmp]# cat …

    Linux干货 2018-03-18
  • grep,sed命令

         文本编辑种类:      行编辑器:sed      全屏编辑器 :nano,vi            vim :vi Mproved      模式化的编辑器: &n…

    Linux干货 2016-08-12
  • N26 – 第二周作业

    1、文件管理类命令和常用使用方法 2、bash命令执行后返回值,和目录展开:     命令执行返回值,存储在“$?”这个特殊变量内。可以使用echo显示或在shell脚本中引用。其中0表示正常执行完成,1-255表示不同的错误类型。     目录展开的特殊符号:  &n…

    Linux干货 2016-12-30
  • LInux用户和组管理详解

    一、用户和组的概念 Linux系统是多任务、多用户的分时操作系统。用户要使用系统资源,需要向管理员验证身份,由管理员进行认证和授权,并对用户的行为进行追踪和审计,以保障系统资源的合理分配以及系统的安全。 要达到账号管理的目的,需要对用户和用户组进行管理。下面分别来介绍用户管理和用户组管理。 每个用户都有唯一的一个编号来标识,这个标识号叫Uid,每个用户至少属…

    Linux干货 2016-08-02

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