Linux 只保留 30 天内日志,删除超 1 个月日志方案
一、核心命令(删除 30 天前文件,保留近 30 天)
1:清理log并打印删除记录,方便审计
bash
find /data/logs -type f -name "*.log" -mtime +30 -print -delete
-print会输出每一个被删除的文件路径,可重定向到清理日志存档:
bash
find /data/logs -type f -name "*.log" -mtime +30 -print -delete >> /var/log/log_clear.log
2:排除指定重要文件不清理
bash
#操作前可执行以下命令,先预览要删除的文件
find /data/logs -type f -name "*.log" -mtime +30 ! -name "important.log"
#安全删除,-print 同步打印已删文件
find /data/logs -type f -name "*.log" -mtime +30 ! -name "important.log" -print -delete
3:仅清理当前一级目录,不递归子目录(防止误删子业务归档)
bash
#先预览,不删除,核对待清理文件
find /data/logs -maxdepth 1 -type f -name "*.log" -mtime +30 -ls
#删除操作
find /data/logs -maxdepth 1 -type f -name "*.log" -mtime +30 -print -delete
补充参数说明
-type f:只匹配磁盘上真实普通文件,排除文件夹,可规避误删软链接指向文件的问题-name "*.log":只处理 log 后缀日志,可去掉匹配所有文件-mtime +30:文件最后修改时间距今大于30天;
-mtime -30= 30天内的文件;-mtime 30= 刚好30天!逻辑取反,等价于-not;-maxdepth 1:仅扫描当前一级目录,不进入任何子文件夹递归查找,必须紧跟查找目录后,写在其他过滤参数后面会失效;-delete无预览直接删除,必须放在命令末尾,否则会报错/逻辑异常。