find 是最强大的文件搜索工具,可以按名称、类型、大小、时间等多种条件查找文件,还能对找到的文件执行操作。掌握 find 是系统管理的必备技能。
find 路径 条件 动作
如果省略路径,默认是当前目录。如果省略动作,默认是打印文件名。
find . -name "*.txt"
find /etc -name "*.conf"
find . -iname "README*"
-name 区分大小写,-iname 不区分大小写。
find . -name "file*"
find . -name "file?.txt"
find . -name "[abc]*"
通配符要用引号包住,防止被 Shell 展开。
-type 指定文件类型:
| 类型 | 含义 |
|---|---|
| f | 普通文件 |
| d | 目录 |
| l | 符号链接 |
| b | 块设备 |
| c | 字符设备 |
| s | 套接字 |
| p | 命名管道 |
find . -type d
find /dev -type b
find . -type f -name "*.sh"
-size 按文件大小查找:
| 后缀 | 含义 |
|---|---|
| b | 块(512字节) |
| c | 字节 |
| k | KB |
| M | MB |
| G | GB |
find . -size +100M
find . -size -1k
find . -size 10M
+ 表示大于,- 表示小于,不加表示等于。
-atime 按访问时间查找(天):
find . -atime +7
find . -atime -1
+7 表示7天前,-1 表示1天内。
-mtime 按修改时间查找(天):
find . -mtime -7
find . -mtime +30
-ctime 按状态改变时间查找(天):
find . -ctime 0
-amin、-mmin、-cmin 以分钟为单位:
find . -mmin -60
find . -amin +30
-perm 按权限查找:
find . -perm 755
find . -perm -111
find . -perm /222
-perm 755:权限正好是 755-perm -111:所有执行位都设置-perm /222:任一写位设置find . -user root
find . -group developers
find . -nouser
find . -nogroup
-nouser 和 -nogroup 查找没有对应所有者或组的文件。
默认是 AND 关系:
find . -name "*.txt" -size +1k
-o 表示 OR:
find . -name "*.txt" -o -name "*.md"
! 或 -not 表示 NOT:
find . ! -name "*.txt"
find . -not -type d
find . \( -name "*.txt" -o -name "*.md" \) -size +1k
括号要转义,前后有空格。
-exec 对每个文件执行命令:
find . -name "*.log" -exec rm {} \;
find . -type f -exec chmod 644 {} \;
find . -name "*.txt" -exec grep "error" {} \;
{} 是文件名占位符,\; 是命令结束符。
-exec ... + 把多个文件传给一个命令:
find . -name "*.txt" -exec grep "pattern" {} +
find . -type f -exec chmod 644 {} +
比 \; 方式更高效,因为减少了命令调用次数。
-ok 与 -exec 类似,但会提示确认:
find . -name "*.tmp" -ok rm {} \;
-delete 删除找到的文件:
find . -name "*.tmp" -delete
find . -type d -empty -delete
处理文件名包含空格或特殊字符的文件:
find . -name "*.txt" -print0 | xargs -0 grep "pattern"
find . -type f -print0 | xargs -0 chmod 644
-print0 用 null 字符分隔,xargs -0 正确解析。
find . -type f -size +100M -exec ls -lh {} \;
find . -type f -size +100M -exec du -h {} \;
find /var/log -name "*.log" -mtime +30 -delete
find /tmp -type f -mtime +7 -exec rm {} \;
find . -type d -empty
find . -type d -empty -delete
find . -type f -mtime -1
find . -type f -mmin -60
find . -type f | wc -l
find . -name "*.txt" | wc -l
find . -name "*.txt" | tar -czf texts.tar.gz -T -
find . -name "*.jpg" -exec cp {} /backup/ \;
-name 按名称,-type 按类型,-size 按大小-mtime 按修改时间,-perm 按权限-exec 对结果执行命令-o 或,! 非,括号分组