find命令详解

find命令详解

实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

一、工作特性:

  • 查找速度略慢;
  • 精确查找,只查找文件路径的基名而非整个路径;
  • 实时查找;
  • 可能只搜索用户具备读取和执行权限的目录

二、 用法:

find [查找起始路径] [OPTIONS] [查找条件] [处理动作]

  • 查找起始路径:指定具体搜索目标起始路径;默认为当前目录;
  • 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;
  • 处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;

1. 查找起始路径

查找时,可以指定搜索层级:

  • -maxdepth level 最大搜索目录深度,指定目录为第一等级,其子目录为2等级;
  • -mindepth level 最小层级目录深度搜索,指最少搜索多少层
    例子:只显示目录的二层,
    ~]$find -maxdepth 2 -mindepth 2 -name file

2、查找条件

即表达式,由选项和测试组成;测试结果通常为布尔型(”true”, “false”)

①根据文件名和inode查找:

  • -name “pattern”:区分字符大小写
  • -iname “pattern”:不区分字符大小写
    注意:此处pattern支持glob风格的通配符;例如 *, ?, [], [^]
  • -samefile name 相同inode好的文件
  • -links n 链接数为n文件
  • -regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非基名;一般不用;

② 根据文件从属关系查找:

  • -user USERNAME:查找属主指定用户的所有文件;
  • -group GRPNAME:查找属组指定组的所有文件;
  • -uid UID:查找属主指定的UID的所有文件;
  • -gid GID:查找属组指定的GID的所有文件;
  • -nouser:查找没有属主的文件(不用跟用户名);
  • -nogroup:查找没有属组的文件(不用跟组名);

③ 根据文件的类型查找:

  • -type TYPE:
    f: 普通文件
    d: 目录文件
    l:符号链接文件
    b:块设备文件
    c:字符设备文件
    p:管道文件
    s:套接字文件

④ 组合测试:

  • 与:-a, 默认组合逻辑,可省;
  • 或:-o
  • 非:-not, !
  • 德.摩根定律

    • (非P)或(非Q)=非(P且Q)
      +(非P)且(非Q)=非(P或Q)
      注意:使用摩根定律时括号加上转义符\
      例子:
      !A -a !B = !(A -o B)
      !A -o !B = ! (A -a B)

⑤ 根据文件的大小查找:

  • -size [+|-]#UNIT
    常用单位:k, M, G

    • #UNIT:(#-1, #]
      如:6k 表示(5k,6k]
    • -#UNIT:[0,#-1]
      如:-6k 表示[0,5k]
    • +#UNIT:(#, oo)
      如:+6k 表示(6k,无穷)

⑥ 根据时间戳查找:

以“天”为单位:

  • -atime [+|-]#

    • #:[#, #-1)
    • -#:(#, 0]
    • +#:(oo, #-1]
  • -mtime
  • -ctime

以“分钟”为单位:

  • -amin
  • -mmin
  • -cmin

⑦ 根据权限查找:

  • -perm [/|-]mode

    • -mode:精确权限匹配;每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;非0权限位的“与”;只有当前面有/或者-时候,0表示不关注
    • /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;非0权限位的“或”;
      find -perm 755 会匹配权限模式恰好是755的文件
      只要当任意人有写权限时,find-perm+222就会匹配
      只有当每个人都有写权限时,find-perm-222才会匹配
      只有当其它人(other)有写权限时,find-perm-002才会匹配
      #### ⑧ 查找比某个文件新或比某个文件旧
  • -newer:选项
    格式为:-newer newest_file_name ! -newer oldest_file_name

3、处理动作:

  • -print:输出至标准输出;默认的动作;
  • -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
  • -delete:删除查找到的文件;
  • -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
  • -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;此处{}表示引用找到的文件的文件名;
  • -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;此处{}表示引用找到的文件的文件名;

注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;如下方式可规避此问题:find | xargs COMMAND

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

(0)
oranixoranix
上一篇 2017-03-19 16:15
下一篇 2017-03-19 16:52

相关推荐

  • Linux发展史

    日期:2016-10-12  Bell,MIT与GE的『Multics』系统     早期的计算机还很不普遍,除非是军事或者高科技用途,或者学术单位的学术研究,否则真的很难接触到。而且计算机架构很难使用。那个时候,程序设计者必须先将程序相关的信息在读卡纸上面打洞然后将读卡纸插入卡片阅读机来将信息读入主机中运算…

    Linux干货 2016-10-14
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@wlm ~]# useradd tuser1 [root@wlm ~]# cp -r etc/skel/ /home/tuser1/…

    Linux干货 2016-11-21
  • N25_第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -R /etc/skel /home/tuser1chmod 700 -R /home/tuser1 2、编辑/etc/group文件,添加组hadoop。 vim /etc/group hadoop:x:1010:1…

    Linux干货 2016-12-25
  • 文件查找(Find和Locate)常用用法及摩根定律趣解(重要)

    文件查找(Find和Locate)常用用法及摩根定律趣解(重要) 摩根定律: 非(A 且 B)=(非 A)或(非 B) 非(A 或 B)=(非 A)且(非 B) 这样看起来不是很好理解下面通过一些列图片给大家展示; 图(1)  图(2)  图二中的黑色就A且B,A且B的反面三种情况(如图1)即为(非A)或(非B)。因此…

    Linux干货 2016-08-21
  • heartbeat实现高可用集群(1)

    环境 node1 192.168.1.35 node2 192.168.1.36 fip 192.168.1.80 daemon httpd nfs 192.168.1.15 配置HA集群的前提 1.节点时间必须同步,使用ntp协议实现 2.节点间需要通过主机互相通信,必须解析主机名至IP地址 a.建议名称解析功能能使用hosts文件实现 b.通信中使用的名…

    Linux干货 2017-11-03
  • Linux发展史

    Linux 操作系统是UNIX操作系统的一种克隆系统。它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。下文简要介绍了Linux发展史。 1969年,美国贝尔实验室的Ken.Thompson和D…

    Linux干货 2016-10-17

评论列表(1条)

  • All well
    All well 2017-03-19 16:54

    写的不错哦,盼盼,很地道,全面,点个赞