ubuntuusers.de

alte Backups (Ordner) löschen, aber nach Datum bestimmte behalten

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

ArpO

Anmeldungsdatum:
25. März 2006

Beiträge: 82

Ehe ich mal wieder meine tollten Scriptkenntnisse (hust) einsetze und mir ein sehr dreckiges Script baue... Vielleicht gibt es ja ein Programm/Script was das schon macht...

Also... ich mache Hardlink Backups mit rsync in Odner nach dem Muster YYYY-MM-TT-ZE-IT (z.b. 2017-01-01-01-00 oder 2017-01-01-13-00). Das Script läuft jeden Tag 2x (1 und 13 Uhr). Von den alten Backups möchte ich jetzt ne nach Alter welche löschen lassen. Von den Backups die älter als 9 Monate sind sollen nur die vom ersten Tag des Monats erhalten bleiben. Von Backups die älter als 2 Monate sind, aber jünger als 9 Monate sollen die Backups vom 1. und 15. erhalten bleiben.

Im Moment nutze ich z.B. ein "rm -rf ./2017-01-0[2-9]-??-??/" und passe das immer wieder selbst an.

Falls jemand fertige Script kennt, würde ich mich über einen Hinweis freuen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Das kannst Du einfach mit Back In Time haben. Das macht auf jeden Fall auch Backups mit Hardlinks auf unveränderte Dateien. Außerdem wird ein Mechanismus namens "Smart Remove" unterstützt, wo Du angeben kannst, wie viele Backups Du pro letzte Tage, Wochen, Monate behalten willst. Außerdem behält er dann eins pro Jahr und es wird auch der Platz auf dem Zielmedium berücksichtigt. Und Du kannst angeben, wie oft das Backup automatisch laufen soll. Besser kannst Du es eigentlich nicht bekommen. ☺

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Ungetestet, nur zur groben Orientierung:

1
2
find BACKUPDIR -maxdepth 1 -name "20*" -not -name "./20??-??-15*"  -not -name "20??-??-01*" -mtime +60 -mtime -90  -ls
find BACKUPDIR -maxdepth 1 -name "./20??-??-15*" -mtime +90  -ls

In BACKUPDIR ohne in die Tiefe zu gehen Dateien die auf 20... passen (verfeinern zu .tgz oder so, wenn möglich), die nicht auf das Muster ...-15 oder ...-01 passen und älter als 60 Tage aber jünger als 90 sind - erstmal auflisten (-ls).

Wenn das alle Tests überstanden hat mit -delete ersetzen, aber Vorsicht, das ist nicht rückgängig zu machen, wenn es schief geht.

Die mit Namen -15... wenn älter als 90 Tage löschen.

Find ist sehr mächtig und komplex. Die Reihenfolge der Kriterien kann eine Rolle spielen. Ebenso kann man übersehen, wenn man Klammern setzen müsste. Ich habe nur husch-husch-geschaut, ob es aussieht, als würde es funktionieren und dabei Verzeichnis- & Dateinamen geändert zum Testen. Beim Rückändern kann leicht was schiefgehen, also aufgepasst.

Die Optionen mit -mtime richten sich nach Modificaton-Date der Datei, nicht nach Namens-foobar. Wenn Du Dateien also später änderst werden sie entsprechend später gelöscht.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Oder mit einem Cronjob immer die Datei, die 3 Monate alt ist, löschen, außer am 1. und 15.

Allerdings bleiben die, die vom 31. sind dann liegen und von Ende Januar - das verhindert eine kurze, elegante Lösung.

1
2
3
# m h   dom        mon dow user	command
0 0	2-14,15-31 * *	   arpo	rm BACKUPDIR/$(date -d -now-3month +"20%y-%m-%d")*
0 0	15         * *	   arpo	rm BACKUPDIR/$(date -d -now-6month +"20%y-%m-%d")*

Insbesondere ob das so mit crontab funktioniert habe ich nicht getestet.

ArpO

(Themenstarter)

Anmeldungsdatum:
25. März 2006

Beiträge: 82

BiT wird mir nicht so viel nützen, da ein paar Verzeichnisse von meinem root-Server aus per rsync bespielt werden. Leider habe ich aber gerade gemerkt, das Datum alle Verzeichnisse gleich ist WTF... Auch das Verzeichnis mit dem Backup von gestern ist am 14. Mai 2017 erstellt worden... hmmm... Muss ich mich doch an die Namen der Verzeichnisse halten und da etwas rechnen, aber "-not name" und das man es mehrmals benutzen darf reicht mir schon erstmal zum puzzeln *g* Bin eigentlich davon ausgegangen das man das nur einmal benutzt.

Antworten |