我今天在研究 SQL Server 2000,它有一个争论该EXECUTE
命令要求-DelBkUps
删除特定年龄的备份。
Linux 是否有任何工具可以删除过旧的备份?我认为它是从某种 cron 作业运行的东西,或者可能是更大的工具集的一部分,比如 Backula 中的东西。
我确信 bash 可以完成这些事情,但我正在寻找一些更预先构建和广泛使用的东西。
答案1
rsnapshot
是一个 Perl 脚本,用于rsync
创建文件备份,它可以配置为保留备份计数(数量),例如 12 个月备份,自动删除较旧的备份。
周期可以按小时、天、周、月来设置,正如您已经猜到的,它将由 . 自动调用cron
。
我用它来创建数据库转储 (mysql) 的每日快照以及Drupal CMS
.您可以进一步阅读rsnapshot.org
答案2
您可能正在寻找这样一个简单的 shell 脚本,因此“预构建”程序很少见也就不足为奇了。
该脚本的工作方式取决于您组织备份的方式。如果您确定可以依赖备份 tar-ball 的文件创建时间戳,则可以简单地使用 find:
find /backup-dir -type f -ctime +366 -exec echo rm -f {} +
将找到所有超过一年的文件并打印出删除它们的命令。 (您可以复制/粘贴输出,或者重新运行上面的内容而不需要echo
)
但文件时间戳可能不是 100% 可靠。因此,我将备份放在标有 4 位数年份和 3 位数“朱利安”日(一年中的第 n 天)的文件夹中。我使用以下命令生成该目录:
date +%Y%j
然后,我生成去年的“目标”时间戳,并将该字符串与所有按字典顺序排列的较小值进行比较:
DAY=$(date +%j)
YEAR=$[ $(date +%Y) - 1 ]
find /backup-dir -type d |
awk '/[0-9]{7}/'
awk -F/ -v target=$YEAR$DAY '$3 < target' |
xargs echo rm -rf
好吧,也许不是所以琐碎的。这次,find
打印出备份目录中的目录名称。第一个awk
可以折叠成第二个;为了清楚起见,我将它们分开。它会过滤掉任何不属于YYYYjjj
./
当且仅当第三个目录组件(第一个为空)小于目标日期时,第二个 awk 沿目录分隔符分割每一行并输出该行。最后,我们有像以前一样的伪删除命令,但使用xargs
而不是find ... -exec ... +
.