关于linux:Linux-find命令常见使用技巧

42次阅读

共计 2208 个字符,预计需要花费 6 分钟才能阅读完成。

find 是 Linux 中弱小的文件查问命令,能够通过各种过滤条件查问想要的文件,还能够对查问后果执行进一步操作。本文对几个实用确容易误用的技巧进行介绍,残缺的命令应用阐明可通过 info find 查阅。

find命令的残缺语法如下:

find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
  • path默认为当前目录
  • 默认的 expression-print,即打印搜寻后果。

日常应用中,用户次要通过管制 表达式 expression 局部参数来达成查问目标,表达式局部能够蕴含如下内容:

  1. 操作符:当有多个查问条件时,条件间的默认逻辑关系是 -and,逻辑关系能够是 -and-or-not括号 () 优先级。
  2. 惯例选项:包含 查问深度 -dept 查问以后挂载点 -mount-xdev 等。
  3. 测试表达式:查问的过滤条件, 这是用户管制查问条件的次要局部,也是最简单的局部,过滤形式包含文件属主、文件工夫范畴(拜访、状态变动、批改工夫)、文件权限、文件名称、文件类型等。
  4. 操作:对合乎过滤条件的操作,包含 删除 -delete打印 -print-print0执行命令 -exec等。

上面就 操作符 权限过滤 -perm执行命令 -exec的技巧进行阐明。

1:操作符

  • 与:多个条件表达式间,默认是与操作,另外 -a-and也示意与操作。示例:

    # 查问名称为 abc 结尾,并且 非合乎链接类对象
    find . -name 'abc*' -not -type l
    find . -name 'abc*' -and -not -type l
  • 或:包含 -o-or。示例:

    # 查问名称为 abc 结尾 或者 非合乎链接类对象
    find . -name 'abc*' -or -not -type l
  • 非:包含 !-not。示例:

    # 查问非合乎链接类对象
    find . -not -type l
    find . ! -type l
  • 优先级组合:优先级组合通过括号示意,不过须要在括号的后面加上 \ 本义,并且括号的前后要有空格。示例:

    # 查问名称为 abc 结尾, 类型为 合乎链接 或 惯例文件的对象
    find . -name abc* -and \(-type l -or -type f \)
  • 两个条件并行:两个条件通过逗号隔开时,两个条件都会评估,但只有后一个条件返回 true 时,整个表达式才返回 true。例如:EXPR1 , EXPR2

2:权限过滤 -perm

  • 对查问对象在 Linux 文件系统的权限进行过滤,过滤对象包含 owne,group、other,过滤形式包含 rwx 或 rwx 的 16 进制,当以 16 进制过滤时,只有非 0 位才失效。示例:

    # 查问 owner 有写权限的对象
    find . -perm o=w
    # 上面条件中,只有 owner 位失效,group 和 other 为 0,示意不过滤
    find . -perm 200
  • -perm 的参数,除了上述没有前缀的形式,还能够包含 -/ 前缀。

    1. 无前缀:示意准确匹配,如上述 -perm 200 示意只匹配 owner 权限为 w 的对象,不匹配 owner 蕴含 rx权限的对象
    2. - 前缀:匹配模式中设置的 所有 bit 都匹配胜利的对象,对象能够蕴含其它的权限,示例:

      # 匹配 owne 都 group 有 r 权限的对象(owner 和 group 用户还能够有其余权限)find . -perm -440
      find . -perm -o=r,g=r
      find . -perm -o+r,g+r
      # 下面查问条件同价如下
      find . -perm -o=r -and -perm -g=r
      find . -perm /o=r -and -perm /g=r
    3. / 前缀:匹配模式中设置的 任意 bit 匹配胜利的对象,对象能够蕴含其余权限,示例:

      # 匹配 owne 或 group 有 r 权限的对象(owner 和 group 用户还能够有其余权限)find . -perm /440
      find . -perm /o=r,g=r
      find . -perm /o+r,g+r
      # 下面查问条件同价如下
      find . -perm -o=r -or -perm -g=r
      find . -perm /o=r -or -perm /g=r

3:执行命令 -exec
-exec等同于 -ok,示意对查问后果执行其余操作命令,find 命令默认执行的命令为 -print,即打印查问后果列表。

  • -exec中,通过 {} 占位符示意文件名在命令中呈现的地位,最终命令执行时,{}会被替换为文件名。
  • -exec中,能够包含 单文件命令 多文件命令 单文件命令 会对每个查问后果执行一次,当命令以分号 ; 结尾时,示意但文件命令;多文件命令 对所有后果一起执行,但命令以加号 + 结尾时,示意多文件命令。因为 +; 在 shell 中都是特殊字符,所有要通过斜杆进行本义,即写成 \+\;

    # 查问名称为 abc 开到的对象,并一一删除。find . -name 'abc*' -exec rm {} \;
    
    # 查问名称为 abc 开到的对象,并打包为一个压缩包。find . -name 'abc*' -exec tar czvf target.gz {} \+

参考:

  • 20 Advanced Linux Find Command Examples
  • 10 Linux Find Exec examples – Advanced Part
  • Linux / UNIX : Examples of find command to find files with specific sets of permissions
  • How To Find Files Based On their Permissions In Linux
  • Find Files Based On Their Permissions

正文完
 0