使用find命令安全清理过期文件需先预览后删除,核心参数-mtime +N表示修改时间超过N天(即N+1天前),配合-delete或-exec rm -f执行,再用find -depth -type d -empty -delete清理空目录,并可配置crontab定时运行。

直接用 find 查找并删除过期文件,关键在准确设定时间条件和安全执行。不建议一步到位删,先确认再删更稳妥。
按修改时间筛选过期文件
-mtime +N 是核心参数,表示“修改时间超过 N 天”,即 N+1 天前及更早的文件。例如:
-
find /var/log -type f -name "*.log" -mtime +30:查/var/log下 30 天前的普通日志文件 -
find /data -maxdepth 2 -type f \( -name "*.mp4" -o -name "*.jpg" \) -mtime +11:查/data两层内、11 天前的视频和图片(注意括号要转义)
⚠️ 注意:-mtime +11 不等于“11 天前”,而是“距今 12 天或更久”,时间计算以 24 小时为单位,从命令执行时刻倒推。
安全删除:先预览,再执行
首次运行务必去掉删除动作,只看会删哪些文件:
- 预览匹配项:
find /path -type f -name "*.log" -mtime +7 -print - 确认无误后删除:
find /path -type f -name "*.log" -mtime +7 -delete - 或用
-exec方式(兼容性更好):find /path -type f -name "*.log" -mtime +7 -exec rm -f {} \;
-delete 简洁但要求匹配结果全是文件;-exec rm -f {} \; 更通用,也便于加日志或做条件判断。
清理残留空目录
批量删文件后常留下空目录,可用以下命令自动收尾:
find /path -depth -type d -empty -delete
-depth 确保先处理子目录,避免父目录非空导致删除失败;-empty 只匹配真正空的目录(不含文件、子目录、隐藏文件)。
写成定时任务自动运行
把清理命令加入 crontab,每天凌晨执行:
- 编辑任务:
crontab -e - 添加一行:
0 3 * * * find /var/log -type f -name "*.log" -mtime +7 -delete 2>/dev/null
2>/dev/null 屏蔽错误输出,避免邮件告警干扰;路径和天数按实际业务调整,比如日志保留 7 天,媒体文件保留 30 天。


















