Linux - Shell - find - 进阶: 范围
-
概述
- 继续昨天的 find
-
背景
- 还有一些 过滤条件
1. 约束: 目录层数
-
概述
- 约束目录的层级
-
选项
-
-maxdepth
- 作用
- 约束最大目录层级
- 相对路径
- 作用
-
-mindepth
- 作用
- 约束最小目录层级
- 相对路径
- 作用
-
其他
- 路径从 1 开始算
- 都是 正整数
-
-
命令
# 查找层数 [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: 逻辑运算
-
概述
- find 的一些约束条件, 也可以做逻辑运算
-
选项
-
-a
-
概述
- 与
-
形式
expr1 expr2 expr1 -a expr2 expr1 -and expr2
-
逻辑
- expr1 为 真, 则 expr2 继续执行
- expr1 为 假, 则 expr2 不再执行
- 有点像 java 的 && 有木有?
-
-
-o
-
概述
- 或
-
形式
expr1 -o expr2 expr1 -or expr2
-
逻辑
- expr1 为 真, 则 expr2 不再执行
- expr1 为 假, 则 expr2 继续执行
- 有点像 java 的 || 有木有?
-
-
! / -not
-
概述
- 非
-
形式
!expr -not expr
-
逻辑
- expr 真值取反
- 最好用 '' 引起来
- 有点像 java 的 ! 有木有?
- expr 真值取反
-
-
3. 约束: 排除路径
-
概述
- 在范围内, 排除一个路径
-
-prune
-
概述
- 排除
-
机制
-
需要前面的 test
- 比如 name, path 之类的东西
-
如果前面的判定为 true, 则不会进入 目录 进行查找
-
不会像其他的 action, 和 -print 排斥
- -print 是默认的 action
-
-
-
命令
# 单独使用 # 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. 约束: 排除多个路径
-
概述
- 一次排除多个路径
-
命令
# 简单举个例子 # 还可以根据需要, 使用 -a, ! # 还可以把 path 换成 regex, name 等等 test > find /etc \( -path "*pam.d*" -o -path "*ntp*" \) -prune -o - print
ps
-
ref
- Finding Files
- gnu 的官方文档
- 东西很全, 也很清楚
- gnu 的官方文档
- 每天一个linux命令(22):find 命令的参数详解
- Finding Files
-
其他
- find 这块, 终于结束了
- 如果真的再要加深, 估计得到 底层, 看 代码实现了
- 不过 gnu 的文档写的倒还听清楚
- 比 man 好不少
- find 这块, 终于结束了
-
以后
- 通配符抽空写一个吧, 反正也就那点东西
- exec 还没写, 这个以后有空再说吧
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出