极简工具箱

免费在线工具 · 本地计算 · 无需上传

find 命令怎么用:按时间、大小、类型找文件并批量处理

磁盘满了要找出大文件、要清理 30 天前的日志、要批量改一批文件的权限——这些事 `find` 一条命令就能干完,不用写脚本。

广告位(百度联盟)

一、基本结构

find 起始目录 条件 动作

不写动作时默认 -print(打印路径)。条件可以叠加,默认是「与」的关系。

find /var/log -name "*.log" -type f

二、按名称与类型

find . -name "*.conf"              # 区分大小写
find . -iname "*.CONF"             # 忽略大小写
find . -type f                     # 普通文件
find . -type d                     # 目录
find . -type l                     # 符号链接

-name 的通配符要加引号,否则会被 shell 先展开。-path 匹配整条路径,适合排除特定目录:

find . -path ./node_modules -prune -o -name "*.js" -print

-prune 表示「不进入这个目录」,-o 是「或」,末尾的 -print 不能省(-prune 分支会吃掉默认动作)。

三、按时间

find . -mtime -7        # 7 天内修改过
find . -mtime +30       # 30 天前修改过
find . -mmin -10        # 10 分钟内修改过
find . -newer ref.txt   # 比 ref.txt 新

-mtime 按「天」算,-mmin 按「分钟」。- 是「之内」,+ 是「之前」,容易记反,建议先用 -ls 看一眼结果再执行删除。

四、按大小

find / -type f -size +100M         # 大于 100MB
find . -size -1k                   # 小于 1KB
find . -size +1G -size -10G        # 区间

单位:c 字节、k KB、M、G。注意 -size 是按块向上取整,-size 1k 包含 0–1024 字节的文件。

找大文件更直观的组合是:

du -ah /var | sort -rh | head -20

find 适合「按条件筛」,du 适合「看谁占空间」,两者配合用。

五、批量处理:-exec 与 xargs

# 对每个文件执行一次命令({} 是占位符,\; 是结束)
find . -name "*.log" -exec gzip {} \;

# 一次传多个文件(+ 结尾,效率高)
find . -name "*.log" -exec gzip {} +

# 用 xargs(文件名含空格时要用 -print0)
find . -name "*.tmp" -print0 | xargs -0 rm -f

三个要点:

六、安全删除旧文件

# 先看
find /data/logs -type f -name "*.log" -mtime +30 -print

# 确认后再删
find /data/logs -type f -name "*.log" -mtime +30 -delete

生产环境建议先 -print | wc -l 看数量,再执行;重要目录先备份或用 -exec mv {} /tmp/trash/ \; 移到回收目录。

七、常见坑

小结

find 目录 条件 动作;-name 加引号,-mtime +30 是 30 天前,-size +100M 找大文件;批量处理用 -exec {} + 或 -print0 | xargs -0;删除前一定先 -print 预览。

本文相关工具(本地计算,无需上传)

更多使用教程