find — 搜索文件

find 是强大的文件搜索工具,基于各种条件在目录树中查找文件。

命令说明

find 递归遍历指定目录,根据表达式匹配文件和目录。它支持按名称、类型、大小、修改时间、权限、所有者等多种条件过滤,并可对匹配结果执行操作。

应用场景

  • 按名称查找文件
  • 查找特定类型的所有文件(如所有 .py 文件)
  • 查找大文件
  • 查找最近修改的文件
  • 查找空文件或空目录
  • 批量删除匹配的文件
  • 结合 -exec 执行任意命令

常用示例

示例 1:按名称查找

bash
复制代码
find /home/alice -name "*.py"
plaintext
复制代码
/home/alice/project/src/main.py
/home/alice/project/src/utils.py
/home/alice/project/tests/test_main.py

示例 2:按类型查找(目录)

bash
复制代码
find /etc -type d -name "nginx*"
plaintext
复制代码
/etc/nginx
/etc/nginx/conf.d

示例 3:查找大于 100MB 的文件

bash
复制代码
find /var/log -type f -size +100M

示例 4:查找最近 7 天内修改的文件

bash
复制代码
find . -type f -mtime -7

示例 5:查找并删除所有 .tmp 文件

bash
复制代码
find /tmp -name "*.tmp" -delete

示例 6:查找所有空文件

bash
复制代码
find . -type f -empty

示例 7:对找到的文件执行命令

bash
复制代码
find . -name "*.log" -exec gzip {} \;

示例 8:查找权限为 777 的文件

bash
复制代码
find /var/www -type f -perm 777

help 参数详解

参数 说明
-name PATTERN 按文件名模式匹配(大小写敏感)
-iname PATTERN 按文件名模式匹配(忽略大小写)
-type TYPE 按类型匹配:f=普通文件,d=目录,l=符号链接,s=套接字,p=管道,c=字符设备,b=块设备
-size N 按大小匹配:+N 大于 N,-N 小于 N,N 精确等于。单位:c=字节,k=KB,M=MB,G=GB
-mtime N 按修改时间(天):+N 超过 N 天前,-N N 天内,N 恰好 N 天前
-mmin N 按修改时间(分钟):+N 超过 N 分钟前,-N N 分钟内
-atime N 按访问时间(天)
-ctime N 按状态变更时间(天)
-perm MODE 按权限匹配,如 644+x-w
-user USER 按文件所有者匹配
-group GROUP 按文件所属组匹配
-empty 匹配空文件或空目录
-exec CMD {} \; 对每个匹配项执行命令,{} 是匹配项的占位符
-exec CMD {} + 对匹配项批量执行命令(减少进程创建)
-delete 删除匹配的文件
-maxdepth N 限制最大递归深度为 N 层
-mindepth N 从第 N 层开始匹配
-not EXPR / ! EXPR 否定表达式
-and / -a 逻辑与(默认行为)
-or / -o 逻辑或
-print 打印匹配结果(默认操作)
-print0 以 NUL 字符分隔输出(与 xargs -0 配合)