文件藏得再深也能找到:用 find 把 Linux 文件搜索讲清楚

举报
yd_294877891 发表于 2026/11/09 09:18:02 2026/11/09
【摘要】 在 Linux 上找文件,最笨的办法是一层一层目录翻过去。目录一多、文件一多,这种办法既慢又容易漏。find 是系统自带的文件搜索工具,不用装、不用建索引,直接按名字、时间、大小、类型等条件在目录树里找,找得准、用得熟,排查问题能省下不少时间。最基础的用法是按名字找。find /home/user -name "*.log" 会在 /home/user 下面递归查找所有以 .log 结尾的文...

在 Linux 上找文件,最笨的办法是一层一层目录翻过去。目录一多、文件一多,这种办法既慢又容易漏。find 是系统自带的文件搜索工具,不用装、不用建索引,直接按名字、时间、大小、类型等条件在目录树里找,找得准、用得熟,排查问题能省下不少时间。

最基础的用法是按名字找。find /home/user -name "*.log" 会在 /home/user 下面递归查找所有以 .log 结尾的文件。-name 区分大小写,如果不确定大小写,换成 -iname 就不区分了。只想找目录就加 -type d,只想找普通文件就加 -type f,比如 find /var -type f -name "*.tmp"。注意 -name 后面的模式要用引号包起来,否则 shell 会先把 *.log 展开,find 拿到的就不是你想要的条件了。

按时间找是排查问题时最常用的姿势。find /var/log -mtime -1 找出最近 24 小时内改过的文件,-mtime -7 是最近一周,+30 则是 30 天以前。磁盘突然满了,先用 find / -type f -size +500M 把大于 500MB 的大文件列出来,再结合 -mtime 看看是最近冒出来的还是早就有的,定位速度比一个个目录 du 快得多。find 还能按权限找,比如 -perm -4000 找出带 setuid 位的文件,安全检查时很有用。

找到文件之后往往还要接着处理,这时 -exec 就派上用场了。find /tmp -name "*.bak" -exec rm {} \; 会把找到的每个 .bak 文件删掉,{} 是占位符、代表当前找到的文件,\; 表示命令结束。执行删除之前最好先把 -exec rm 换成 -print 看一眼清单,确认没误删再动手。文件数量特别多的时候,-exec 会对每个文件单独起一个进程,换成 find /tmp -name "*.bak" -print0 | xargs -0 rm 效率更高,-print0 和 -0 配合还能正确处理文件名里带空格的情况。

最后说两个容易踩的坑。第一,find 默认会递归进子目录,目录层级很深、文件很多时(比如 node_modules)会很慢,可以用 -maxdepth 2 限制只往下找两层,或者用 -prune 把不需要的目录剪掉:find . -path ./node_modules -prune -o -name "*.js" -print。第二,find 的条件之间默认是“与”的关系,多个条件都满足才算命中;想表示“或”要用 -o,并注意用括号分组,括号在 shell 里要转义:find . \( -name "*.jpg" -o -name "*.png" \) -print。

一句话总结:按名字用 -name、按时间用 -mtime、按大小用 -size,找到先 -print 确认、再用 -exec 或 xargs 处理,大目录记得 -maxdepth 或 -prune 限速。把 find 用顺手,找文件就不再靠翻目录碰运气。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。