010 find命令
命令说明
find 用于在目录树中按名称、类型、时间、大小、权限等条件查找文件,并可对结果直接执行命令(-exec),是 Linux 最强大的文件检索工具。
语法
find [查找路径] [查找条件] [动作]
常用参数
| 参数 | 说明 |
|---|---|
| -name "pattern" | 按文件名匹配(支持通配符),如 -name "*.log" |
| -iname | 按名称匹配且忽略大小写 |
| -type f/d/l | 按类型:f 普通文件、d 目录、l 符号链接 |
| -size +10M / -500k | 按大小:+ 大于、- 小于、无符号等于;单位 c/k/M/G |
| -mtime -7 | 按修改时间:-7 表示 7 天内,+7 表示 7 天前(单位:天) |
| -mmin -60 | 按分钟级修改时间 |
| -user name | 按文件所有者 |
| -perm 755 | 按权限查找 |
| -maxdepth n | 限制查找深度,n=1 只查当前层 |
| -exec cmd {} \; | 对每个结果执行命令,{} 代表文件名 |
| -delete | 删除找到的文件(GNU find) |
使用示例
$ find /etc -name "nginx.conf"
在 /etc 下按名称查找 nginx.conf
$ find . -name "*.log" -type f
查找当前目录下所有 .log 文件
$ find /var/log -mtime +30 -name "*.gz"
查找 30 天前的压缩日志(清理旧日志常用)
$ find / -size +100M -type f
查找根分区下大于 100M 的文件,排查磁盘占用
$ find . -name "*.sh" -exec chmod +x {} \;给所有 shell 脚本加执行权限
$ find /tmp -type f -atime +7 -delete
删除 /tmp 下 7 天未访问的文件
$ find . -type d -empty
查找空目录
$ find /data -name "core.*" | xargs rm -f
配合 xargs 批量删除 core 文件
$ find . -user www -name "*.php" | wc -l
统计某用户的 php 文件数量
实用技巧
- find 会遍历整个目录树,范围越大越慢;尽量缩小查找路径并用 -maxdepth 限制深度。
- -name 要加引号:find . -name *.txt 会先被 shell 展开导致查找错误,应写 "*.txt"。
- -exec 与 xargs 对比:-exec 每个文件 fork 一次进程,文件多时 find ... | xargs 更高效。
- 按名字快速查找用 locate(基于数据库,需 updatedb),按属性精确查找用 find。
- find 表达式支持逻辑:-a(与)、-o(或)、!(非),如 find . \( -name "*.c" -o -name "*.h" \)。