GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aufbewahrung:Tägliche Backups für eine Woche, wöchentlich für einen Monat, monatlich für ein Jahr und danach jährlich

Lösung 1:

Sie überarbeiten das ernsthaft. Schlecht.

Hier ist etwas Pseudocode:

  • Jeden Tag:
    • Erstelle ein Backup, lege es in daily Verzeichnis
    • entferne alles außer den letzten 7 daily Sicherungen
  • Jede Woche:
    • Erstelle ein Backup, lege es in weekly Verzeichnis
    • Entferne alles bis auf die letzten 5 weekly Sicherungen
  • Jeden Monat:
    • Erstellen Sie ein Backup, legen Sie es in monthly ab Verzeichnis
    • Entferne alles außer den letzten 12 monthly Sicherungen
  • Jedes Jahr:
    • Erstellen Sie ein Backup, legen Sie es in yearly ab Verzeichnis

Die Menge an Logik, die Sie implementieren müssen, ist ungefähr gleich, nicht wahr? KÜSSEN.

Das sieht einfacher aus:

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

Oder nach Dateianzahl statt nach Alter:

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

Lösung 2:

Wenn Sie zum Beispiel nur 8 tägliche Backups und 5 wöchentliche (jeden Sonntag) Backups behalten wollen, funktioniert das so:

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
echo ${!keep[@]}

Ab heute (10.11.2014) wird Folgendes ausgegeben:

20141012 20141019 20141026 20141102 20141103 20141104
20141105 20141106 20141107 20141108 20141109 20141110

Als Übung bleibt Ihnen nur noch, alle Sicherungsdateien zu löschen, deren Namen nicht im keep erscheinen -Array.

Wenn Sie außerdem 13 monatliche Backups (jeden ersten Sonntag im Monat) und 6 jährliche Backups (jeden ersten Sonntag im Jahr) führen möchten, wird es etwas komplizierter:

for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
        DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
        for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
                ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
        DW=$(date +%-W)
        for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
                ((DW+=$(date -d $AY-12-31 +%W)))
        done
        ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
echo ${!keep[@]}

Ab heute (10.11.2014) wird Folgendes ausgegeben:

20090104 20100103 20110102 20120101 20130106 20131103
20131201 20140105 20140202 20140302 20140406 20140504
20140601 20140706 20140803 20140907 20141005 20141012
20141019 20141026 20141102 20141103 20141104 20141105
20141106 20141107 20141108 20141109 20141110

Wie oben, löschen Sie einfach alle Backup-Dateien, die nicht in diesem Array gefunden werden.


Linux
  1. Wie ich Ansible und Anacron für die Automatisierung verwende

  2. So verwenden Sie erweitertes rsync für große Linux-Backups

  3. Wie konvertiere ich den Tag des Jahres und das Jahr in ein Datum JJJJMMTT?

  4. So bestimmen Sie die Nummer der Woche des Monats

  5. Wie füge ich X Tage zum Datum hinzu und erhalte ein neues Datum?

So fügen Sie Icinga Director für Icinga2 und Icinga Web 2 hinzu.

So finden Sie das Installationsdatum und die Uhrzeit des Linux-Betriebssystems

So stellen Sie Datum und Uhrzeit unter Linux ein

Erste Schritte und Installation von Wine für Ubuntu

So ändern Sie Datum, Uhrzeit und Zeitzone in Linux Mint 20

So halten Sie Rocky Linux 8 auf dem neuesten Stand