Linux - Shell - find - 进阶: 范围

Posted 轩辕拾銉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux - Shell - find - 进阶: 范围相关的知识,希望对你有一定的参考价值。

  1. 概述

    1. 继续昨天的 find
  2. 背景

    1. 还有一些 过滤条件

1. 约束: 目录层数

  1. 概述

    1. 约束目录的层级
  2. 选项

    1. -maxdepth

      1. 作用
        1. 约束最大目录层级
        2. 相对路径
    2. -mindepth

      1. 作用
        1. 约束最小目录层级
        2. 相对路径
    3. 其他

      1. 路径从 1 开始算
      2. 都是 正整数
  3. 命令

    # 查找层数 [1, 1]
    > find /etc -name \'passwd\' -maxdepth 1
    # 查找层数 [1, 正无穷]
    > find /etc -name \'passwd\' -mindepth 1
    # 查找层数 [1, 2]
    > find /etc -name \'passwd\' -maxdepth 1 -mindepth 1
    

2. find: 逻辑运算

  1. 概述

    1. find 的一些约束条件, 也可以做逻辑运算
  2. 选项

    1. -a

      1. 概述

      2. 形式

        expr1 expr2  
        expr1 -a expr2  
        expr1 -and expr2  
        
      3. 逻辑

        1. expr1 为 真, 则 expr2 继续执行
        2. expr1 为 假, 则 expr2 不再执行
        3. 有点像 java 的 && 有木有?
    2. -o

      1. 概述

      2. 形式

        expr1 -o expr2  
        expr1 -or expr2  
        
      3. 逻辑

        1. expr1 为 真, 则 expr2 不再执行
        2. expr1 为 假, 则 expr2 继续执行
        3. 有点像 java 的 || 有木有?
    3. ! / -not

      1. 概述

      2. 形式

        !expr
        -not expr
        
      3. 逻辑

        1. expr 真值取反
          1. 最好用 \'\' 引起来
        2. 有点像 java 的 ! 有木有?

3. 约束: 排除路径

  1. 概述

    1. 在范围内, 排除一个路径
  2. -prune

    1. 概述

      1. 排除
    2. 机制

      1. 需要前面的 test

        1. 比如 name, path 之类的东西
      2. 如果前面的判定为 true, 则不会进入 目录 进行查找

      3. 不会像其他的 action, 和 -print 排斥

        1. -print 是默认的 action
  3. 命令

    # 单独使用
    # path 里是 通配符
    # 结果只会显示 /etc/pam.d
    > find /etc -path "*pam.d*" -prune
    
    # 排除
    # 1. -o 后面必须要跟 action,
    #   1. 单纯的 expr 会自带 -print
    # 2. 按理说, 这里的 -prune 后面也有个 print, 但是我试了试, 发现 -o 连接多个 print, 最后只打印一次, 但是原因, 确实没找到
    # 3. -prune 把 path 匹配的内容, 标记了 true, 所以 print 就不执行了, 没有标记 true 的, print 反而会执行...
    
    > find /etc -path "*pam.d*" -prune -o -print
    
    

4. 约束: 排除多个路径

  1. 概述

    1. 一次排除多个路径
  2. 命令

    # 简单举个例子
    # 还可以根据需要, 使用 -a, !
    # 还可以把 path 换成 regex, name 等等 test
    > find /etc \\( -path "*pam.d*" -o -path "*ntp*" \\) -prune -o - print
    

ps

  1. ref

    1. Finding Files
      1. gnu 的官方文档
        1. 东西很全, 也很清楚
    2. 每天一个linux命令(22):find 命令的参数详解
  2. 其他

    1. find 这块, 终于结束了
      1. 如果真的再要加深, 估计得到 底层, 看 代码实现了
      2. 不过 gnu 的文档写的倒还听清楚
        1. 比 man 好不少
  3. 以后

    1. 通配符抽空写一个吧, 反正也就那点东西
    2. exec 还没写, 这个以后有空再说吧

以上是关于Linux - Shell - find - 进阶: 范围的主要内容,如果未能解决你的问题,请参考以下文章

如何学习linux

Linux进阶命令之find

linux培训哪些比较好?

Linux进阶之find命令xshell速度慢的解决和Linux警告音的关闭

第5课.linux进阶命令

Linux shell脚本进阶使用