Linux

如何保存:一周的每日備份,一個月的每周備份,一年的每月備份,之後每年備份

  • September 26, 2021

我需要每天在此伺服器上備份數據和配置文件。我需要保留:

  • 一周的每日備份
  • 一個月的每周備份
  • 一年的每月備份
  • 之後的年度備份

所有這些都是通過每天從 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目錄

您必須實現的邏輯量大致相同,是嗎?吻。

這看起來更容易:

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

引用自:https://serverfault.com/questions/575163