概述
- 以下是Linux
find
命令的详细教程,包含语法、选项、示例和高级用法 - 资料已经分类整理好:
https://pan.quark.cn/s/26d73f7dd8a7
1. 基本语法与功能
find
命令用于在指定目录下递归搜索文件和目录,支持按名称、类型、时间、大小等条件筛选。
核心语法:
find [搜索路径] [匹配条件] [执行动作]
- 搜索路径:默认为当前目录(
.
),可指定多个路径。 - 匹配条件:如按名称、时间、大小等筛选(见下表)。
- 执行动作:对匹配的文件执行操作(如删除、打印、执行命令等)。
2. 常用匹配条件
2.1 按名称搜索
选项 | 作用 | 示例 |
---|
-name "模式" | 按文件名匹配(支持通配符) | find . -name "*.txt" |
-iname "模式" | 忽略大小写匹配文件名 | find . -iname "ReadMe.md" |
-regex "模式" | 按正则表达式匹配路径名 | find . -regex ".*\.(jpg|png)" |
2.2 按文件类型搜索
选项 | 作用 | 示例 |
---|
-type f | 普通文件 | find . -type f -name "data*" |
-type d | 目录 | find /etc -type d -name "net*" |
-type l | 符号链接 | find /usr/bin -type l |
-type b | 块设备文件 | find /dev -type b |
-type c | 字符设备文件 | find /dev -type c |
2.3 按文件时间搜索
选项 | 作用 | 示例 |
---|
-mtime n | 修改时间为n天前的文件 | find . -mtime 3 |
-mtime +n | 修改时间超过n天的文件 | find . -mtime +7 |
-mtime -n | 修改时间不足n天的文件 | find . -mtime -2 |
-mmin n | 修改时间为n分钟前的文件 | find . -mmin 30 |
-newer file | 比指定文件更新的文件 | find . -newer last_backup |
2.4 按文件大小搜索
选项 | 作用 | 示例 |
---|
-size n[kMG] | 文件大小为n单位的文件 | find . -size 10M |
-size +n[kMG] | 文件大小超过n单位的文件 | find . -size +1G |
-size -n[kMG] | 文件大小不足n单位的文件 | find . -size -50k |
2.5 按权限和所有者搜索
选项 | 作用 | 示例 |
---|
-perm mode | 权限匹配的文件 | find . -perm 644 |
-user owner | 所有者为指定用户的文件 | find /home -user root |
-group group | 所属组为指定组的文件 | find . -group developers |
2.6 逻辑组合条件
选项 | 作用 | 示例 |
---|
-and | 逻辑与(默认) | find . -type f -name "*.log" -mtime +30 |
-or | 逻辑或 | find . -name "*.jpg" -or -name "*.png" |
-not | 逻辑非 | find . -not -type d |
() | 分组(需转义) | find . \( -name "*.txt" -or -name "*.md" \) -mtime -7 |
3. 常用执行动作
选项 | 作用 | 示例 |
---|
-print | 打印路径(默认动作) | find . -name "*.bak" -print |
-ls | 详细列表形式输出 | find . -type f -ls |
-delete | 删除匹配的文件 | find . -name "*.tmp" -delete |
-exec 命令 {} \; | 对每个匹配文件执行命令 | find . -name "*.jpg" -exec cp {} backup/ \; |
-ok 命令 {} \; | 执行前交互式确认 | find . -size +1G -ok rm {} \; |
4. 高级用法示例
4.1 批量文件操作
find . -name "*.log" -exec gzip {} \;
find /var/log -type f -mtime +30 -exec mv {} /archive/logs/ \;
find /tmp -type f -mtime +30 -ok rm {} \;
4.2 查找并替换文本内容
find . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
4.3 查找空文件和目录
find . -type f -empty -delete
find . -type d -empty -ls
4.4 按权限查找与修复
find / -type f -perm 777 -exec chmod 644 {} \;
find . -user root -exec chown $(whoami) {} \;
4.5 查找大文件/目录
find / -type f -size +1G -exec ls -lh {} \;
find / -type f -exec du -Sh {} + | sort -rh | head -n 10
5. 性能优化与注意事项
- 限制搜索范围:避免从根目录(
/
)递归搜索,可能导致性能问题。 - 使用
-prune
排除目录:
find /home -path "/home/user/backup" -prune -o -type f -print
-exec
与 -exec ... +
的区别:
-exec cmd {} \;
:为每个匹配文件单独执行一次命令(效率低)。-exec cmd {} +
:将所有匹配文件作为参数一次性传递给命令(效率高)。
- 避免权限不足错误:使用
2>/dev/null
忽略错误:find / -name "secret.txt" 2>/dev/null
6. 总结
find
命令的核心是条件筛选和动作执行,常用场景包括:
- 文件管理(查找、删除、移动)
- 系统维护(清理临时文件、修复权限)
- 数据处理(批量替换、备份)
通过组合不同的选项,find
可以高效完成复杂的文件搜索和处理任务。建议先使用-print
预览结果,确认无误后再执行危险操作(如-delete
)。