1. 命令概述
- 命令名称:
find - 核心功能:在指定目录下递归搜索文件和目录,根据各种条件进行查找
- 主要用途:文件搜索、批量处理、系统管理、数据清理
2. 语法格式
find [路径...] [表达式]
3. 常用选项
| 选项 | 说明 |
|---|---|
-name | 按文件名查找(支持通配符) |
-iname | 按文件名查找(忽略大小写) |
-type | 按文件类型查找(f: 文件, d: 目录, l: 符号链接) |
-size | 按文件大小查找 |
-mtime | 按修改时间查找 |
-atime | 按访问时间查找 |
-ctime | 按状态改变时间查找 |
-user | 按文件所有者查找 |
-group | 按文件所属组查找 |
-perm | 按文件权限查找 |
-exec | 对找到的文件执行命令 |
-delete | 删除找到的文件 |
-print | 显示找到的文件(默认) |
-maxdepth | 指定搜索的最大深度 |
-mindepth | 指定搜索的最小深度 |
-empty | 查找空文件或空目录 |
4. 时间参数说明
时间单位
n:正好 n 天前+n:n 天前或更早-n:n 天内
时间类型
-mtime:文件内容最后修改时间-atime:文件最后访问时间-ctime:文件状态最后改变时间(权限、所有者等)
5. 常用实例详解
(1) 按文件名查找
# 查找当前目录下所有 .txt 文件
find . -name "*.txt"
# 查找所有 .jpg 文件(忽略大小写)
find /home -iname "*.jpg"
# 查找名为 config 的文件
find /etc -name "config"
(2) 按文件类型查找
# 查找所有目录
find . -type d
# 查找所有普通文件
find . -type f
# 查找所有符号链接
find . -type l
# 查找所有块设备文件
find /dev -type b
(3) 按文件大小查找
# 查找大于 10M 的文件
find . -size +10M
# 查找小于 1K 的文件
find . -size -1k
# 查找等于 5M 的文件
find . -size 5M
# 查找空文件
find . -empty
(4) 按时间查找
# 查找 7 天内修改过的文件
find . -mtime -7
# 查找 30 天前修改过的文件
find . -mtime +30
# 查找 24 小时内访问过的文件
find . -atime -1
# 查找最近 1 小时内修改过的文件
find . -mmin -60
(5) 按用户和权限查找
# 查找属于用户 tom 的文件
find . -user tom
# 查找属于组 developers 的文件
find . -group developers
# 查找权限为 755 的文件
find . -perm 755
# 查找可执行文件
find . -perm /u=x,g=x,o=x
(6) 限制搜索深度
# 只搜索当前目录,不进入子目录
find . -maxdepth 1
# 搜索深度为 2 层的目录
find . -maxdepth 2
# 从第 2 层开始搜索
find . -mindepth 2
6. 执行命令(-exec)
(1) 基本用法
# 删除所有 .tmp 文件
find . -name "*.tmp" -exec rm {} \;
# 更改所有 .txt 文件的权限
find . -name "*.txt" -exec chmod 644 {} \;
# 统计所有 .py 文件的行数
find . -name "*.py" -exec wc -l {} \;
(2) 使用 + 提高效率
# 使用 + 将多个文件一次性传递给命令(更高效)
find . -name "*.txt" -exec chmod 644 {} +
# 查找并打包所有 .log 文件
find /var/log -name "*.log" -exec tar -czf logs.tar.gz {} +
(3) 结合 xargs 使用
# 使用 xargs 处理找到的文件
find . -name "*.tmp" -print0 | xargs -0 rm
# 查找并复制文件
find . -name "*.conf" -print0 | xargs -0 -I {} cp {} /backup/
7. 逻辑操作符
(1) 与操作(-a,默认)
# 查找所有 .txt 文件且大于 1M
find . -name "*.txt" -size +1M
# 查找属于 tom 且 7 天内修改过的文件
find . -user tom -mtime -7
(2) 或操作(-o)
# 查找 .txt 或 .log 文件
find . -name "*.txt" -o -name "*.log"
# 查找属于 tom 或属于组 developers 的文件
find . -user tom -o -group developers
(3) 非操作(!)
# 查找不是 .txt 的文件
find . ! -name "*.txt"
# 查找不属于 tom 的文件
find . ! -user tom
(4) 分组操作(使用括号)
# 查找 .txt 或 .log 文件,且大于 1M
find . \( -name "*.txt" -o -name "*.log" \) -size +1M
# 查找属于 tom 且 7 天内修改过的文件,或者属于组 developers 的文件
find . \( -user tom -mtime -7 \) -o -group developers
8. 实际应用场景
场景一:清理临时文件
# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -delete
# 删除 30 天前的日志文件
find /var/log -name "*.log" -mtime +30 -delete
场景二:备份配置文件
# 备份所有 .conf 文件
find /etc -name "*.conf" -exec cp {} /backup/ \;
# 查找并打包所有配置文件
find /etc -name "*.conf" -exec tar -czf etc_backup.tar.gz {} +
场景三:查找大文件
# 查找大于 100M 的文件
find / -size +100M 2>/dev/null
# 查找当前目录下最大的 10 个文件
find . -type f -exec du -h {} + | sort -rh | head -10
场景四:批量修改文件
# 给所有 .sh 文件添加可执行权限
find . -name "*.sh" -exec chmod +x {} \;
# 更改所有 .txt 文件的所有者
find . -name "*.txt" -exec chown tom:tom {} \;
场景五:查找特定内容
# 查找包含 "password" 的文件
find . -type f -exec grep -l "password" {} \;
# 查找空目录
find . -type d -empty
# 查找损坏的符号链接
find . -type l -exec test ! -e {} \; -print
9. 注意事项
- 权限问题:搜索系统目录可能需要 root 权限
- 性能考虑:搜索大目录时使用
-maxdepth限制深度 - 删除操作:使用
-delete或-exec rm时要特别小心,建议先使用-print确认 - 符号链接:默认会跟随符号链接,使用
-P不跟随 - 错误输出:使用
2>/dev/null忽略权限错误
核心要点总结:
find是 Linux 中最强大的文件搜索工具- 常用选项:
-name、-type、-size、-mtime、-user - 时间参数:
+n(n 天前或更早)、-n(n 天内)、n(正好 n 天前) - 执行命令:
-exec和-delete用于处理找到的文件 - 逻辑操作:
-a(与)、-o(或)、!(非)、()(分组) - 实际应用:文件清理、备份、批量处理、系统维护
- 性能优化:使用
-maxdepth限制深度,使用+替代\;提高效率