如何保存:每周备份一周,每周备份一个月,每月备份一年,之后每年备份

Modified on: Sun, 19 May 2019 08:20:02 +0800

我需要每天在此服务器上备份数据和配置文件。我需要保留:

  • 每周备份一周
  • 一个月的每周备份
  • 一年的每月备份
  • 之后的年度备份

所有这一切都是通过每天从cron运行的shell脚本完成的。

这是运行10年后备份文件的外观:

blog-20050103.tar.bz2 blog-20060102.tar.bz2 blog-20070101.tar.bz2 blog-20080107.tar.bz2 blog-20090105.tar.bz2 blog-20100104.tar.bz2 blog-20110103.tar.bz2 blog-20120102.tar.bz2 blog-20130107.tar.bz2 blog-20130902.tar.bz2 blog-20131007.tar.bz2 blog-20131104.tar.bz2 blog-20131202.tar.bz2 blog-20140106.tar.bz2 blog-20140203.tar.bz2 blog-20140303.tar.bz2 blog-20140407.tar.bz2 blog-20140505.tar.bz2 blog-20140602.tar.bz2 blog-20140707.tar.bz2 blog-20140728.tar.bz2 blog-20140804.tar.bz2 blog-20140811.tar.bz2 blog-20140816.tar.bz2 blog-20140817.tar.bz2 blog-20140818.tar.bz2 blog-20140819.tar.bz2 blog-20140820.tar.bz2 blog-20140821.tar.bz2 blog-20140822.tar.bz2

最佳答案

你严重过度工程了。不好。

这是一些伪代码:

  • 每一天:

    • 进行备份,放入daily目录
    • 删除除最后7个daily备份
    • 之外的所有内容
  • 每周:

    • 进行备份,放入weekly目录
    • 删除除最后5个weekly备份
    • 之外的所有内容
  • 每个月:

    • 进行备份,放入monthly目录
    • 删除除最后12个monthly备份
    • 之外的所有内容
  • 每年:

    • 进行备份,放入yearly目录


你必须实现的逻辑量大致相同,是吗? KISS。

这看起来更容易:

s3cmd ls s3://backup-bucket/daily/ | \
    awk '$1 < "'$(date +%F -d '1 week ago')'" {print $4;}' | \
    xargs --no-run-if-empty s3cmd del

或者,按文件计数而不是年龄:

s3cmd ls s3://backup-bucket/daily/ | \
    awk '$1 != "DIR"' | \
    sort -r | \
    awk 'NR > 7 {print $4;}' | \
    xargs --no-run-if-empty s3cmd del
作者:,MikeyB

相关问答

添加新评论