删除旧备份的脚本

我有很多备份,如:

backup-20130528_054504_mysql.tar.gz, bill_db_201305290130.BAK.bz2, etc_20130412.tbz 

这是每天完成的完整备份。

在今天之前,我有一个像这样的命令行的cron任务:

 /usr/bin/find /media/backups -ctime +7 -delete 

但这是个坏主意。

一台服务器在7天前停止执行新的备份(文件系统已满),所有旧的备份都被cron删除。

也许我需要一个新的脚本来替代这个“find -ctime”,它会保留一些旧的备份。

我所有的备份文件都有名称{unique_prefix} YYYYMMDD

我想要的东西是:

  • 去年之前每年备份一次
  • 去年每个月都有一个备份
  • 上个月的每周备份4次
  • 以及最近7天的7次备份。

为每个{unique_prefix}。

所有这些文件通过rsync,ssh等由cron下载到我的服务器。

我不喜欢重新发明轮子,而且很确定这是一个典型的任务。

请指点我的解决scheme。

我不同意dawud,认为简单的备份是最好的。

真正需要的不是一个更聪明的方法来删除东西(虽然这不是一个坏主意,我写了类似的东西,只是保持最后的N个备份),但适当的监控你的文件系统,所以你会注意到它填满很早之前,你可以采取行动。 这样你就不会丢失你的数据。

一个shell脚本可以处理高达一定复杂度的备份。 您还有一些工具可以利用tarrsync来完成更复杂的任务(例如rsnapshot )。

但是,看起来您需要非常精细的备份保留策略,即shell脚本可能不适合处理,除非它不必要地复杂,并且提及的其他工具不提供。

您应该考虑使用专用软件来执行此任务。 有许多,但bacula和阿曼达浮现在脑海。