You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留最新8个备份文件并删除旧文件 解决logrotate不生效问题

如何保留最新的8个备份文件并删除更早的旧文件

现有备份文件均为.zip后缀,命名格式如下:

backup-Y-M-D.zip
backup-Y-M-D.zip
backup-Y-M-D.zip
backup-Y-M-D.zip
.
.
backup-Y-M-D.zip

需求为按文件创建/修改日期排序,仅保留最新的8个文件,删除其余旧备份。

原logrotate配置失效原因

之前使用的logrotate配置未生效,核心原因有三点:

  • logrotate的原生设计是轮转由它自己管理生成的文件,不会主动识别其他脚本/手动生成的、命名不符合其轮转规则的存量备份文件,默认只会处理未被它添加过轮转序号后缀的目标文件,直接放入backup-Y-M-D.zip格式的文件无法被识别为待轮转的历史备份。
  • 配置中rotate 4参数仅设置保留4份备份,和需要保留8份的需求不匹配。
  • 配置中daily规则要求两次运行间隔满24小时才会触发轮转,未到间隔时手动运行也不会执行操作。

实现方案

方案1:Shell命令清理(推荐,稳定无兼容问题)

直接通过系统命令按时间排序筛选文件执行清理,逻辑透明可控,适合备份清理场景:

  1. 先进入备份文件所在目录,执行预览命令确认待删除文件列表,避免误删:
cd /root/test
ls -t *.zip | tail -n +9
  1. 确认输出的待删除文件列表无误后,执行删除操作:
ls -t *.zip | tail -n +9 | xargs rm -f

参数说明:

  • ls -t:将目录下的zip文件按最后修改时间从新到旧排序
  • tail -n +9:从列表第9个文件开始截取,也就是跳过前8个最新的文件,剩余的就是需要删除的旧备份
  • 如果需要定时自动清理,直接将命令写入crontab即可,比如设置每天凌晨2点自动执行清理:
0 2 * * * cd /root/test && ls -t *.zip | tail -n +9 | xargs rm -f

方案2:修正logrotate配置(如需沿用logrotate)

如果必须使用logrotate实现需求,可按如下方式修改配置:

/root/test/*.zip {
    daily
    missingok
    rotate 8
    nocompress
    olddir /root/test
    ifempty
}

配置注意事项:

  • 将rotate参数值改为8,匹配保留8份最新备份的需求
  • 删除原配置中的extension .zip项,该配置会干扰自定义命名文件的轮转识别
  • 首次运行时需要加-f参数强制触发轮转,否则会因未满足24小时间隔要求不执行操作,执行命令为logrotate -f 你的配置文件路径
  • logrotate默认按文件修改时间判断新旧,和按创建日期排序的需求基本一致,若手动修改过文件mtime可能出现排序偏差。

内容的提问来源于stack exchange,提问作者Siddharth Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:12:17