如何保留最新的 4 个备份文件并删除较旧的备份文件

如何保留最新的 4 个备份文件并删除较旧的备份文件

如何保留最新的 4 个备份文件并删除较旧的备份文件?

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

大约有 80 个具有 .zip 扩展名的文件,我想做的就是根据创建日期保留最新的 8 个文件。我还尝试了 logrotate 但未能旋转日志,因为它没有执行任何操作。下面是logrotate的配置文件。

/root/test/*.zip {
    daily
    missingok
    extension .zip
    rotate 4
    nocompress 
}

答案1

该配置看起来不正确;对于初学者来说,logrotate需要一个实际的文件名(如/root/test/backup.zip),而不是通配符1。文件本身需要以logrotate期望的格式命名——或者更确切地说,logrotate需要被告知期望文件具有的命名(否则它将假设file.1.ext和类似)。这也许可以通过指定日期格式来实现,但感觉就像您正在将工具弯曲到其设计目的之外。

像这样的东西可能就是你所追求的:

find '/root/test' -maxdepth 1 -type f -name 'backup-*.zip' -print0 \
  | sort -rz \
  | tail -zn+5 \
  | xargs -t0 -n1 true rm

true为了安全起见,这是有限制的——删除最后一次的单词以使其处于活动状态。您也可以删除-n1,因为这只是为了提高输出的可读性。

然后,您需要一些东西来触发此文件老化过程。通常,理想情况下,这将是创建备份文件的同一过程的一部分,因此它恰好在需要时发生。如果这是不可能的(例如,如果文件是通过某个远程进程传输的),那么您将考虑创建一个crontab条目来按计划运行它。


1只是为了限定这一点,logrotate 接受通配符,但它们不以此处有用的方式处理 - 每个匹配的文件将被视为需要轮换的一组项目中的第一个。

它可能对你不起作用,或者我认为你的文件最终会变得有点混乱,需要重命名。

相关内容