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脚本2——顺序选择语句

    流程控制      顺序执行      选择执行      循环执行 顺序执行:     条件选择:if语句 if语句为选择执行 注意:if语句可嵌套 单分支 if  判断条件:t…

    Linux干货 2016-08-18
  • 马哥教育网络版22期+第10周作业

    week10 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;   (1) 为硬盘新建两个主分区;并为其安装grub;   (2) 为硬盘的第一个主分区提供内核和ramdisk文件;&nbsp…

    Linux干货 2016-10-29
  • Zabbix-3.2.3实现微信(WeChat)告警

    Zabbix-3.2.3实现微信(WeChat)告警 zabbix Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。 关于邮件报警可以参考:Zabbix Web 邮件报警 一、微信企业号申请 地址: …

    2017-04-21
  • 高级文件管理系统

    1、 设定文件系统配额 在内核中执行: • 以文件系统即分区为单位启用 • 对不同组或者用户的策略不同 根据块或者节点进行限制: • 执行软限制(soft limit),限时限制 • 硬限制(hard limit) 初始化: • 分区挂载选项,针对用户或组:usrquota 、grpquota • 初始化数据库,也即是创建用户或组文件系统配额数据库:quot…

    Linux干货 2016-09-01
  • lvs应用

    练习一:负载均衡一个php应用: 测试是否需要会话保持; 是否需要用到共享存储;    为了检测是否需要会话保持和共享存储,要在两台主机上分别配置LAMP环境;这样就使得两者之间没有了共享存储;负载均衡使用nat模型的wlc算法,并且不使用lvs的长连接选项。数据库故意使用了相同的账号密码来进行安装。 步骤一:配置环境: 使用yum分别安…

    Linux干货 2016-11-11
  • rpm与yum的初步学习

    rpm与yum的初步学习   我们在使用linux系统时需要安装和卸载软件,我们这节就先来看一下rpm和yum的初步简单实用。 linux软件安装:   安装程序的方式:      通用二进制格式:直接解压压缩文件,就可以使用。但一定要注意安装平台。     &nbsp…

    Linux干货 2016-08-24

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