Linux定时清理旧文件crontab配合find删除教程 Linux
前言
日志、缓存、上传临时文件会越积越多撑爆磁盘,需要定期删除指定天数前的旧文件。crontab 定时任务配合 find 的 -mtime 按修改时间查找,再用 -delete 或 xargs rm 删除,是标准做法。本文讲解命令写法、安全预览、定时配置和避免误删。
操作步骤
1. 先预览会删哪些文件(不删除)
find /var/log/app -type f -mtime +7 -ls
-mtime +7 表示修改时间超过 7 天。
2. 确认后删除旧文件
find /var/log/app -type f -mtime +7 -delete
3. 用 xargs 删除(兼容老系统)
find /var/log/app -type f -mtime +7 | xargs rm -f
4. 只删指定扩展名
find /data/tmp -type f -name "*.tmp" -mtime +3 -delete
5. 写入 crontab 每天凌晨执行
crontab -e
添加:
0 3 * * * find /var/log/app -type f -mtime +7 -delete
6. 查看已配置的定时任务
crontab -l
7. 先干跑再上线
把 -delete 换成 -print,观察输出无误再删。
常见坑
- 直接 -delete 不预览,误删业务目录造成数据丢失。
- -mtime 按修改时间,新建未动的文件不受影响。
- 路径写错通配符,可能扫到系统目录。
- xargs 遇到带空格文件名会拆错,用 -print0/xargs -0。
- find 删到正在写入的日志文件,进程句柄未释放空间不立即回收。
- 定时任务里相对路径失效,必须写绝对路径。
- 根目录下盲目 find 删除是高危操作,严格限定目录。
总结
定时清理 = find 按 -mtime 找旧文件 + crontab 周期执行。先 -ls/-print 预览,确认范围再 -delete,路径用绝对路径。生产目录严格限定,带空格文件名用 -print0,避免误删正在使用的文件。
遇到问题加QQ23979811 协助处理