find 命令速查表 - Linux 文件搜索常用命令大全

找文件大多靠 find,但它默认全盘递归、还会跟随符号链接,扫起来有坑。这张表覆盖按名、按类型、按大小、按时间、按权限的过滤,以及 -exec 批量处理命中的文件,帮你又快又稳地用对 find。

系统与运维·共 37 条命令·最后更新 2026-07-21
find文件搜索linux

典型使用场景

线上磁盘告警涨到 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"
查找所有 .log 文件
find . -name "file*"
查找 file 开头的文件
find /var/log -name "*.gz"
在指定目录查找
find . -maxdepth 2 -name "*.log"
限制搜索深度为 2 层(-mindepth 设最小深度)

按类型查找 By Type 5

find . -type f
只查找普通文件
find . -type d
只查找目录
find . -type l
只查找符号链接
find . -type f -name "*.sh"
查找 .sh 文件
find . ! -type d
排除目录(查找非目录)

按大小查找 By Size 5

find . -size +100M
查找大于 100MB 的文件
find . -size -1k
查找小于 1KB 的文件
find . -empty
查找空文件或空目录
find . -size 0
查找大小为 0 的文件
find . -size +10M -size -100M
查找 10MB 到 100MB 之间的文件

按时间查找 By Time 5

find . -mtime -7
查找 7 天内修改过的文件
find . -mtime +30
查找 30 天前修改的文件
find . -mmin -60
查找 60 分钟内修改的文件
find . -atime -1
查找 1 天内访问过的文件
find . -newer file.txt
查找比 file.txt 更新的文件

按权限查找 By Permission 4

find . -perm 755
查找权限恰好为 755 的文件
find . -perm -u+x
查找用户有执行权限的文件
find . -perm /o+w
查找其他人有写权限的文件
find . -perm -g=w
查找组有写权限的文件

按用户查找 By Owner 5

find . -user tom
查找指定用户拥有的文件
find . -group dev
查找指定组的文件
find . -uid 1000
按 UID 查找
find . -nouser
查找无所有者的文件(用户已删除)
find . -nogroup
查找无所属组的文件

执行操作 Actions 7

find . -name "*.tmp" -delete
删除匹配的文件
find . -name "*.sh" -exec chmod +x {} \;
对每个文件执行命令
find . -name "*.log" -exec rm {} +
批量执行命令(更高效)
find . -name "*.txt" -print
打印匹配的文件路径
find . -name "*.bak" -ok rm {} \;
执行前逐个确认
find . -name node_modules -prune -o -name "*.js" -print
排除目录后继续查找(-prune 剪枝)
find . -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日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们