• Linux


    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 还没写, 这个以后有空再说吧
  • 相关阅读:
    MxNet Windows下安装
    Binary Tree Postorder Traversal--leetcode难题讲解系列
    Populating Next Right Pointers in Each Node II--leetcode难题讲解系列
    Recover Binary Search Tree--leetcode难题讲解
    bash + script
    Linux笔记
    谷歌面经 Tree Serialization
    Python strange questions list
    bit操作 转
    ubuntu系统从中文环境改成英文环境
  • 原文地址:https://www.cnblogs.com/xy14/p/12061025.html
Copyright © 2020-2023  润新知