我有一个脚本,用于从备份目录中删除早于X=21天的数据库转储:
DB_DUMP_DIR=/var/backups/dbs
RETENTION=$((21*24*60)) # 3 weeks
find ${DB_DUMP_DIR} -type f -mmin +${RETENTION} -delete
如果由于某种原因数据库转储作业无法完成一段时间,所有的转储最终都将被丢弃。因此,为了保障起见,我希望至少保留最年轻的Y=7个转储,即使它们中的某些数据比21天还要旧。
我正在寻找一种比这更优雅的解决方案:
DB_DUMP_DIR=/var/backups/dbs
RETENTION=$((21*24*60)) # 3 weeks
KEEP=7
find ${DB_DUMP_DIR} -type f -printf '%T@ %p\n' | \ # list all dumps with epoch
sort -n | \ # sort by epoch, oldest 1st
head --lines=-${KEEP} |\ # Remove youngest/bottom 7 dumps
while read date filename ; do # loop through the rest
find $filename -mmin +${RETENTION} -delete # delete if older than 21 days
done
(这段代码可能存在一些小错误 - 请忽略它们。这只是为了说明我自己能想出什么,以及我为什么不喜欢它)
编辑:查找选项“-mtime”是单次的:“-mtime +21”实际上意味着“至少22天以上”。这总是让我感到困惑,所以我改用“-mmin”。仍然是单次的,但只有一分钟。