用 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 处理特殊文件名。记住先列出、确认无误再删除,清理旧文件就不会误删。
- 点赞
- 收藏
- 关注作者
评论(0)