-mtime 是最稳妥的日志清理方式,基于文件修改时间判断过期,语义清晰、行为稳定;推荐先预览再执行,配合 -exec 删除并记录日志,或优先使用 logrotate 自动管理。

用 -mtime 是最稳妥、最常用的方式,它基于文件最后一次修改时间(mtime)判断是否过期,语义清晰、行为稳定,不受挂载选项干扰,适合绝大多数日志清理场景。
确认你要清理的日志路径和保留天数
比如 /var/log/myapp/ 下的 .log 文件,只保留最近 30 天的,其余全部清理。
先安全预览匹配的文件
别急着删,先看看哪些文件会被清理:
find /var/log/myapp -type f -name "*.log" -mtime +30 -print
这条命令会列出所有修改时间超过 30 天(即 2026 年 6 月 28 日 21:30 之前修改)的普通日志文件。加 -type f 防止误匹配目录,加 -name "*.log" 锁定目标类型。
按需调整时间范围
-
-mtime +30:30 天前(不含当天)修改的文件 -
-mtime 30:正好第 30 天(即 2026 年 6 月 28 日 00:00–23:59 修改)的文件 -
-mtime -30:最近 30 天内(含今天)修改的文件
注意:-mtime 按 24 小时整倍数计算,不是日历日。例如今天是 7 月 28 日,-mtime +30 实际匹配的是 6 月 27 日 21:30 之前修改的文件。
执行清理(推荐带日志记录)
避免直接用 -delete(部分旧版 find 不支持),改用 -exec 更可控:
find /var/log/myapp -type f -name "*.log" -mtime +30 -exec rm -f {} \; -print >> /var/log/myapp_cleanup.log 2>&1
这会删除文件,同时把被删文件路径记入日志,方便追溯。
集成到定时任务(每天凌晨执行)
编辑 crontab:
0 2 * * * find /var/log/myapp -type f -name "*.log" -mtime +30 -exec rm -f {} \; >> /var/log/myapp_cleanup.log 2>&1
表示每天 2:00 执行,输出和错误都追加到日志。
更优替代:优先用 logrotate 管理标准日志
如果这是 Nginx、Syslog 或其他服务产生的日志,应配置 /etc/logrotate.d/ 下的规则,实现自动轮转+压缩+过期清理,比手动 find 更可靠、更少出错。例如:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 644 root root
}
然后手动测试:logrotate -f /etc/logrotate.conf
不复杂但容易忽略细节











