如何保留最新的 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
做接受通配符,但它们不以此处有用的方式处理 - 每个匹配的文件将被视为需要轮换的一组项目中的第一个。
它可能对你不起作用,或者我认为你的文件最终会变得有点混乱,需要重命名。