find 是 Linux 系统中最强大的文件查找命令。 它可以按 文件名、类型、大小、时间、权限 等多种条件递归搜索目录,执行指定操作
基本语法
find [路径] [条件] [操作]
- 
路径 :从哪个目录开始查找(默认当前目录
.) - 
条件:限定文件的筛选规则
 - 
操作:找到后执行的动作(如打印、删除等)
 
常用查找条件
|--------|-------------------------|----------------------------|
| 条件     | 含义                      | 示例                         |
| -name  | 按文件名匹配(支持通配符)           | find . -name "*.c"        |
| -iname | 忽略大小写的匹配                | find . -iname "*.jpg"     |
| -type  | 按类型查找: f 文件, d 目录, l 链接 | find /etc -type d          |
| -size  | 按大小查找(单位:k、M、G)         | find . -size +10M          |
| -mtime | 按修改时间(天)                | find . -mtime -3 (3天内修改)   |
| -mmin  | 按修改时间(分钟)               | find . -mmin -10 (10分钟内修改) |
| -user  | 查找属于某用户的文件              | find /home -user root      |
| -perm  | 按权限查找                   | find . -perm 644           |
| -empty | 查找空文件或空目录               | find . -empty              |
常用操作动作
|------------------|-------------|------------------------------------------------|
| 操作               | 说明          | 示例                                             |
| 默认(无操作)          | 打印路径        | find . -name "*.log"                          |
| -print           | 显式打印(默认动作)  | find /tmp -type f -print                       |
| -delete          | 删除匹配文件      | find . -name "*.o" -delete                    |
| -exec CMD {} \; | 对每个匹配结果执行命令 | find . -name "*.c" -exec grep -H "usb" {} \; |
| -exec CMD {} +   | 批量执行命令(更快)  | find . -name "*.c" -exec rm {} +              |
| -ok CMD {} \;   | 交互确认执行命令    | find . -name "*.bak" -ok rm {} \;            |
常见实用示例
1. 查找名为 test.c 的文件
find / -name test.c
# 2. 查找大于 100M 的文件
find /home -size +100M
# 3. 查找最近 1 天修改的文件
find . -mtime -1
# 4. 删除所有 .o 临时文件
find . -name "*.o" -delete
# 5. 查找并统计所有 .c 文件数量
find . -name "*.c" | wc -l
# 6. 查找并执行命令(例如打印包含 "usb" 的行)
find . -name "*.c" -exec grep -H "usb" {} \;
# 7. 查找空目录
find . -type d -empty
# 8. 查找 777 权限文件
find / -type f -perm 777
# 9. 按多个条件组合:查找大文件且最近修改
find /var -size +10M -mtime -7
# 10. 查找并批量删除(安全高效)
find logs/ -name "*.log" -mtime +7 -exec rm -f {} +
        逻辑组合条件
|----------|---------|-------------------------------------|
| 运算符      | 说明      | 示例                                  |
| -a       | 逻辑与(默认) | find . -type f -a -size +1M         |
| -o       | 逻辑或     | find . -name "*.c" -o -name "*.h" |
| ! 或 -not | 逻辑非     | find . ! -name "*.c"               |
性能与注意事项
- 
对大目录使用
-exec CMD {} +比\;更快; - 
若仅按文件名匹配,可使用
locate或fd提速; - 
删除操作建议先打印确认:
 - 
find . -name "*.tmp" -print ``# 确认后find . -name "*.tmp" -delete - 
使用
xargs可进一步提升效率: - 
find . -name "*.log" | xargs rm -f 
官方源码仓库(GNU findutils)
- 
Git 仓库地址: 👉 https://git.savannah.gnu.org/git/findutils.git
 - 
Web 浏览器在线查看(推荐): 👉 https://git.savannah.gnu.org/cgit/findutils.git/tree/
 - 
主页与说明文档: 👉 https://www.gnu.org/software/findutils/
 
