用 find 精准找文件:别再一层层翻目录了

举报
yd_265618206 发表于 2026/11/02 16:56:31 2026/11/02
【摘要】 刚接手一台服务器,想找某个配置文件,或者想清理一批旧日志,很多人第一反应是 ls 一层层翻,目录一深就晕。其实 find 就是干这个的:按名字、时间、大小、类型一次筛出来。 最常用的三种找法按名字找最直观。找当前目录下所有 .log 文件:find . -name "*.log"注意引号不能省。不加引号,shell 会先把 *.log 展开,find 拿到的就不是通配符了。按时间找适合清理旧...

刚接手一台服务器,想找某个配置文件,或者想清理一批旧日志,很多人第一反应是 ls 一层层翻,目录一深就晕。其实 find 就是干这个的:按名字、时间、大小、类型一次筛出来。

最常用的三种找法

按名字找最直观。找当前目录下所有 .log 文件:

find . -name "*.log"

注意引号不能省。不加引号,shell 会先把 *.log 展开,find 拿到的就不是通配符了。

按时间找适合清理旧文件。找 7 天前修改过的日志:

find /var/log -mtime +7 -name "*.log"

-mtime +7 的意思是“修改时间超过 7 天前”,+ 是超过、- 是以内、直接写数字是当天。清理之前先只列出来确认,确认无误再加 -delete,顺序别反了。

按大小找适合定位磁盘占用。找当前目录下大于 100MB 的文件:

find . -type f -size +100M

-type f 只找普通文件,排除目录;+100M 是大于 100MB。找到大文件后,再用 du -h 看它到底占了多少。

两个容易踩的坑

第一个坑:默认会递归进所有子目录,包括 .git、node_modules 这种巨型目录,输出刷屏。排除它们:

find . -path ./node_modules -prune -o -type f -name "*.log" -print

-prune 的意思是“这条分支剪掉不进”,后面 -o 接真正的查找条件。

第二个坑:文件名带空格。find 默认输出用换行分隔,文件名里有空格时,后续用 xargs 处理会断成两截。稳妥的写法是 -print0 配 xargs -0:

find . -name "*.log" -print0 | xargs -0 ls -lh

一个顺手的工作流

排查问题时,我常用的组合是:先用 find 按时间筛出最近改动过的文件,再用 grep 在里面找关键词——

find /etc -mtime -1 -type f | xargs grep -l "timeout"

意思是:/etc 下 24 小时内改动过的文件里,哪些提到了 timeout。定位配置变更、排查“谁动了我的配置”,这一招很管用。

小结

find 的核心就三板斧:按名字(-name)、按时间(-mtime)、按大小(-size),再配 -prune 排除干扰目录、-print0 处理特殊文件名。记住先列出、确认无误再删除,清理旧文件就不会误删。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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