Linux 工具可以在备份太旧时删除它们吗?

Linux 工具可以在备份太旧时删除它们吗?

我今天在研究 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 ... +.

相关内容