find命令支持-a(且)、-o(或)、!或-not(非)逻辑运算符组合条件,需用转义括号控制优先级,实现精准文件定位。

find 命令支持用逻辑运算符把多个条件串起来,实现“且”“或”“非”的组合,这是它真正灵活的关键。不用写脚本,一条命令就能精准定位目标文件。
用 -a(或省略)实现“且”关系
默认情况下,多个条件之间就是“与”关系,即所有条件都必须满足。也可以显式加上 -a 提高可读性。
- 查找当前目录下既是普通文件、又以 .log 结尾、且大于 10MB 的文件:
find . -type f -name "*.log" -size +10M - 等价写法(加 -a 更明确):
find . -type f -a -name "*.log" -a -size +10M
用 -o 实现“或”关系
-o 表示“或”,注意它的优先级比 -a 低,所以多个 -o 连用时通常要加括号分组,避免歧义。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 查找当前目录下所有 .c 或 .h 文件:
find . \( -name "*.c" -o -name "*.h" \) - 括号必须转义(
\(和\)),否则 shell 会报错 - 如果漏掉转义,bash 会尝试把括号当语法结构处理,直接报错
用 ! 或 -not 实现“非”关系
! 或 -not 对紧随其后的条件取反,常用于排除某些路径或类型。
- 查找除 /proc 和 /sys 外的所有 .conf 文件:
find / \( -path "/proc" -o -path "/sys" \) -prune -o -name "*.conf" -print - 更简洁的排除方式(配合 -prune):
find / -path "/proc" -prune -o -path "/sys" -prune -o -name "*.conf" -print - 单独取反某个条件:查找不属于用户 alice 的 .tmp 文件:
find /tmp -user alice -not -name "*.tmp"
混合逻辑:嵌套与优先级控制
复杂场景下,需要合理使用括号控制执行顺序。记住:括号优先级最高,-not 次之,-a 最高(默认),-o 最低。
- 查找修改时间在 7 天内、且是普通文件、但不是属主为 root 的文件:
find . -mtime -7 -type f ! -user root - 查找是目录或(是文件且大小超过 100KB):
find . \( -type d -o \( -type f -size +100k \) \) - 外层括号包裹整个 OR 结构,内层括号限定 AND 子条件










