Wie kann ich jedes stündliche Backup mit Ausnahme der 24 neuesten löschen?

367
Édouard

Ich hatte früher einen Server mit stündlichen / täglichen Backups, die dank dieses Tutorials jederzeit verfügbar waren . Leider, wobei der Server gebraten und ich habe jetzt meine Backups auf einem NAS zu machen, die es nicht laufen 1 meinen Liebling Linux Geschmack. Es kommt daher vor, dass meine bisherige Lösung nicht auf besagtem NAS ausgeführt wird, da ihre binären Optionen weniger Optionen bieten.

Ich finde jedoch, dass hourly.nes schreckliche Namen für Backups gibt. Ich hätte sie lieber als horaire_YYYY_MM_DD_HHhMM2 formatiert, damit die Benutzer sofort wissen, wann sie gesichert wurden.

Ich möchte 24 Stunden Backups aufbewahren, bevor ich nur tägliche Backups verwalte. Bitte beachten Sie, dass ich nicht will stündliche Backups nur für die 24 letzten Stunden zu halten; wenn aus irgendeinem Grunde 3 ein paar Sicherungen übersprungen, so würde ich will noch 24 Sicherungen halten, auch wenn einige sind mehr als ein Tag alt.

So ging ich vor:

 ls --format=single-column --directory --sort=time $(scheme "*") \ | tail --lines +$((backup_count + 1)) \ | xargs --verbose --delimiter="\n" rm -rf 

schemeist nur eine Funktion, die die korrekte Formatierung des Sicherungsverzeichnisses einschließlich Datum gewährleistet. Hier verwendet *, um jedes stündliche Backup abzugleichen. lslistet jedes stündliche Backup-Verzeichnis auf, rückwärts sortiert nach Erstellungszeitpunkt 4, tailsverwirft die neuesten 24 und xargslöscht die verbleibenden.

Ich muss jetzt sicherstellen, dass ich nur POSIX-Optionen verwende. Ich ging zuerst mit:

ls -1 -d -t "$(scheme \*)" \ | tail -n +$((backup_count + 1)) \ | sed 's/\n/\0/g' \ | xargs -0 rm -rf 

erweitert aber lsnicht *; Ich habe es durch ersetzt find, habe aber keine Ahnung, wie die Ergebnisse nach dem Erstellungsdatum sortiert werden sollen. Ich frage mich, ob ich das auch tailkomplett umgehen könnte find, was wohl ohnehin das richtige Werkzeug für die Aufgabe ist.

Wie kann ich bei jedem stündlichen Backup einen Befehl ausführen, der nicht zu den letzten 24 zählt?


  1. Nun, das könnte wahrscheinlich sein, aber das würde bedeuten, alle benutzerfreundlichen Tools und den Support, die vom NAS-Anbieter bereitgestellt werden, zu verwerfen, was wir nicht wollen.
  2. horaireAnstatt hourlyweil die Benutzer und ich Französisch sprechen.
  3. Der Backup-Server muss für einen Tag offline sein, da er verschoben werden muss, z
  4. Die alphabetische Reihenfolge könnte wahrscheinlich auch gut funktionieren, wenn die Daten die Sommerzeit ignorieren, was ein ungünstiger, aber akzeptabler Kompromiss wäre.
1
Sie sollten wahrscheinlich "find" anstelle von "ls" verwenden. Mit find können Sie problemlos eine Liste von Dateien erhalten, die älter als 24 Stunden sind, anstatt die Ausgabe von ls zu analysieren. Außerdem ist die Analyse der Ausgabe von ls [nicht empfohlen] (http://unix.stackexchange.com/questions/128985/why-not-parse-ls). Sami Laine vor 8 Jahren 1
@SamiLaine Wie ich schon in der (letzten Zeile einer langen) Frage gesagt habe, das ist die Richtung, in die ich jetzt gehe. Es würde mir wahrscheinlich auch erlauben, Probleme mit Zitaten aufgrund von Leerzeichen in Dateinamen zu vermeiden. Aber wie ich schrieb, möchte ich keine Liste von Verzeichnissen, die älter als 24 Stunden sind, ich möchte eine Liste von (alles andere als) der letzten 24 Verzeichnisse, egal wie alt sie sind. Wenn aus irgendeinem Grund Backups für mehr als 24 Stunden angehalten werden, möchte ich noch ein "aktuelles stündliches Backup" für "rsync --link-dest" mit, z Édouard vor 8 Jahren 0
Auch der NAS * wird mit Python installiert. Ein Wechsel zu * wäre * wahrscheinlich eine gute Idee. Édouard vor 8 Jahren 0
Ich habe einmal ein kleines Programm geschrieben, um genau dies zu tun: Wählen Sie die zu löschenden Sicherungen basierend auf ihrem Datum und einem Satz konfigurierbarer Regeln aus. Siehe das Skript "bu-rmselect" unter https://www.jaapeldering.nl/software/ Jaap Eldering vor 8 Jahren 0

0 Antworten auf die Frage