find 命令速查表 - Linux 文件搜索常用命令大全
找文件大多靠 find,但它默认全盘递归、还会跟随符号链接,扫起来有坑。这张表覆盖按名、按类型、按大小、按时间、按权限的过滤,以及 -exec 批量处理命中的文件,帮你又快又稳地用对 find。
典型使用场景
线上磁盘告警涨到 90% 却又不知道是哪个目录在膨胀,这是 find 最高频的应用场景。先用 du 看目录总览,再用 find . -type f -size +1G 直接列出超过 1G 的大文件,用 -mtime -3 找出最近三天动过的文件——往往就是异常日志或临时文件。找到元凶后,配合 -exec 或 -delete 一键清除过期的 .log/.tmp,清理磁盘占用时比满盘翻目录表高效得多。
按名称查找 By Name 6
find . -name "file.txt"find . -iname "file.txt"find . -name "*.log"find . -name "file*"find /var/log -name "*.gz"find . -maxdepth 2 -name "*.log"按类型查找 By Type 5
find . -type ffind . -type dfind . -type lfind . -type f -name "*.sh"find . ! -type d按大小查找 By Size 5
find . -size +100Mfind . -size -1kfind . -emptyfind . -size 0find . -size +10M -size -100M按时间查找 By Time 5
find . -mtime -7find . -mtime +30find . -mmin -60find . -atime -1find . -newer file.txt按权限查找 By Permission 4
find . -perm 755find . -perm -u+xfind . -perm /o+wfind . -perm -g=w按用户查找 By Owner 5
find . -user tomfind . -group devfind . -uid 1000find . -nouserfind . -nogroup执行操作 Actions 7
find . -name "*.tmp" -deletefind . -name "*.sh" -exec chmod +x {} \;find . -name "*.log" -exec rm {} +find . -name "*.txt" -printfind . -name "*.bak" -ok rm {} \;find . -name node_modules -prune -o -name "*.js" -printfind . -type f -exec ls -lh {} + | sort -k5 -rh命令示例
列出当前目录下超过 1GB 的文件
find . -type f -size +1G-size +1G 匹配大于 1G 的普通文件;取消 -type f 则会连带把大目录也算进去。
输出
./backup/dump.sql ./media/concert_4k.mp4
查找最近 3 天修改过的配置文件
find /etc -type f -mtime -3-mtime -3 表示最近 3 天内(含)修改过,=3 是恰好 3 天前,+3 是 3 天之前,方向别弄反。
输出
/etc/nginx/nginx.conf /etc/hosts
删除 30 天前的历史日志
find /var/log -name "*.log" -mtime +30 -delete-delete 是真实的删除操作且无输出,建议先去掉该参数跑一遍确认命中范围,再用 -exec rm {} \; 或直接启用。
常见坑与注意事项
- find 默认递归扫描整棵目录树,在大目录上很慢;先用 -maxdepth 限定深度,或用 -prune 跳过不必扫描的目录。
- 时间筛选 -mtime 的 N 有三种语义:-3=最近 3 天内,3=恰好 3 天前,+3=3 天之前,混用极易选错范围。
- -exec 与 -delete 会真实改动文件,务必先不带它们跑出命中列表,确认无误后再真正执行删除或操作。
- 符号链接默认不被跟随,需要跟随时用 -L 或 -follow;否则某些目标会漏掉或行为与预期不同。
- 想用它匹配名称含空格的目录时,注意 find 的匹配和 shell glob 不同,模式最好加单引号避免被提前展开。
提示
- find 默认递归查找当前目录及子目录,用 -maxdepth 1 限制只查当前目录。
- -exec 用 {} 代表找到的文件,\; 表示每个文件执行一次,+ 表示批量执行。
- 删除文件前先用 -print 确认匹配结果,避免误删。
常见问题
find 的 -exec 和 xargs 到底怎么选?
结果少、命令简单时用 -exec {} + 或 -exec {} \; 在 find 内部批量执行;结果多或要对每项做复杂处理时改用 xargs,务必在 find 侧配 -print0、xargs 侧配 -0,否则文件名含空格或换行时会出错。
find 找到的文件怎么安全地删除?
最稳妥是直接给 find 加 -delete,它会在条目所在目录内就地删除命中的文件且不经过别名。若要用管道,优先 find ... -print0 | xargs -0 rm;别用裸 xargs rm 或反引号包 find 的方式,遇到特殊文件名会误删或报错。
想同时找多种文件(比如 txt 和 log)怎么写条件?
用成对括号把各 -name 条件与 -o 组合,并让它和默认的隐式 -a 配好,例如把匹配 txt 与匹配 log 的两个 -name 放进一对括号,后面再接 -type f。不加括号时 -o 会和 -a 的优先级混在一起,结果往往不是你想找的。
为什么 find -name 不等于按路径匹配?
-name 只匹配文件名(basename)而不管目录部分,-path 才按完整路径匹配。要按多层路径筛选或排除目录时改用 -path 搭配 -prune;同时建议先用 -maxdepth 限定范围,避免全盘递归扫描。
按修改时间过滤时,-mtime 和 -mmin 的正负号和数字是什么意思?
-mtime N 表示修改于 N 天前那个 24 小时内,-mtime -N 表示最近 N 天以内,-mtime +N 表示 N 天以前;精确到分钟用 -mmin,例如 -mmin -30 表示最近 30 分钟内。注意 -mtime 按整天取整,长短边界容易踩坑。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。