使用find -mtime +30配合文件名匹配可安全批量删除30天前修改的归档日志,需先确认路径、后缀(如.log.gz/.tar.gz/.zip)和时间逻辑,预览再执行-delete。

直接用 find 配合 -mtime +30 找出30天前修改过的归档日志,再用 -delete 安全批量删除即可。关键是要先确认路径、文件名特征和时间逻辑,避免误删。
明确日志文件的位置和命名规律
应用历史归档日志通常存放在固定目录,比如:/var/log/appname/archive/ 或 /opt/app/logs/backup/
常见后缀有 .log.gz、.tar.gz、.zip 或纯 .log(带日期命名,如 app-20240101.log)。
先手动检查几个文件的修改时间:
ls -lt /var/log/appname/archive/ | head -5
用 find 精确匹配并预览待删文件
执行以下命令查看哪些文件会被匹配(不删除):
find /var/log/appname/archive/ -type f \( -name "*.log.gz" -o -name "*.tar.gz" -o -name "*.zip" \) -mtime +30 -print
-
-mtime +30表示“最后修改时间在30天前”,即超过30×24小时(不是日历月) -
-type f确保只处理普通文件,跳过目录或软链接 - 括号
\( ... \)和-o用于多后缀逻辑或,注意转义
安全执行批量删除
确认预览无误后,把 -print 换成 -delete:
find /var/log/appname/archive/ -type f \( -name "*.log.gz" -o -name "*.tar.gz" -o -name "*.zip" \) -mtime +30 -delete
-
-delete是 find 内置动作,比-exec rm {} \;更高效且原子性更好 - 若提示“Argument list too long”,说明文件太多,可加
-print0 | xargs -0 rm替代 - 生产环境建议先打包备份关键时间段的日志(如最近7天),再删
补充:按访问时间或创建时间筛选?
-mtime 基于修改时间(mtime),对日志归档最常用。
如果日志是只读归档,修改时间可能早于实际归档时间,此时可用:
-
-atime +30:按最后访问时间(适合定期扫描后未再打开的归档) -
-ctime +30:按状态变更时间(如权限/所有者改动,一般不用) - Linux 不直接支持 creation time(birth time),所以不推荐依赖“创建时间”











