Shell 四剑客之四:find 文件查找实战
find 是按条件找文件,配合 -exec 就是批量操作:找大文件、清旧日志、批量改权限、按时间归档,全靠它。这篇讲按名字时间找、-exec 与 xargs 和清理实战。
一、按名字、类型、时间找
# 按名字找(通配符要引起来,不然 shell 先展开了)
find /eda/proj -name "*.log"
find /eda/proj -name "core*" -o -name "*.tmp"
# 按类型找:f 普通文件,d 目录,l 软链接
find /eda/proj -type f -name "*.v"
find /eda/proj -type d -empty
# 按时间找:7 天前改过的,24 小时内新建的
find /eda/proj -mtime +7
find /eda/proj -mmin -60
# 按大小找:大于 100M 的文件
find /eda/proj -type f -size +100M
-mtime +7 是“7 天前”,-mtime -7 是“7 天内”,加减号别搞反。时间条件配 -name 一起用,先缩小范围再动手。
二、按权限、属主找
# 找权限是 777 的文件(太开放了)
find /eda/proj -type f -perm 777
# 找属主已经离职的用户的文件
find /eda/proj -user zhangsan
# 找没有属主的孤儿文件
find /eda/proj -nouser -o -nogroup
三、-exec 与 xargs:找到就动手
# 找到就删(先不加 -delete 演练一遍!)
find /tmp -type f -name "*.tmp" -mtime +7 -print
find /tmp -type f -name "*.tmp" -mtime +7 -delete
# -exec:对每个文件执行命令,{} 是文件名,\; 结束
find /eda/proj -type f -name "*.log" -exec gzip {} \;
# -exec 结尾用 +:把文件攒一批再执行,快得多
find /eda/proj -type f -name "*.log" -exec gzip {} +
# xargs:把 find 的结果拼成命令参数
find /eda/proj -type f -name "*.bak" | xargs rm -f
# 文件名带空格:-print0 配 xargs -0,用空字符分隔才安全
find /eda/proj -type f -name "*.tmp" -print0 | xargs -0 rm -f
-exec {} + 比 -exec {} \; 快得多,前者一批文件调一次命令,后者一个文件调一次。文件名带空格必须用 -print0 | xargs -0,不然带空格的文件名会被拆成两个。
四、实战:清理日志与临时文件
# 找最大的 10 个文件
find /eda/proj -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10
# 清理 30 天前的回归临时目录(先看清单再删)
find /eda/proj/regress -type d -name "tmp*" -mtime +30 -print
find /eda/proj/regress -type d -name "tmp*" -mtime +30 -exec rm -rf {} +
# 压缩 7 天前的日志(不删,留着查)
find /var/log -type f -name "*.log" -mtime +7 -exec gzip {} +
# 找一周内被改过的大于 1G 的文件(谁在偷偷写大文件)
find /eda -type f -size +1G -mtime -7 -exec ls -lh {} +
五、坑
- 先 -print 再 -delete:删除操作没有后悔药,先打印清单确认,再换成删除。
- 通配符引起来:
-name *.log不加引号,shell 会先在当前目录展开,结果完全不是你想要的。 - 别在 / 下乱用 -delete:路径写错一个字母就是灾难,重要目录先在测试目录演练。
- 深度限制:目录太深用
-maxdepth 2限制层级,不然整棵树扫下来很慢。
find 的定位是“文件系统的搜索引擎”:条件越准,结果越有用。找得到、看得清、删得稳,这三步养成习惯,磁盘满、临时文件堆积这类问题就不会半夜找上门。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。






