Dieses einfache Script geht davon aus, dass im Verzeichnis /var/data/my-ftp-backup-folder/ Backups vorliegen und fängt an, alte Dateien zu löschen, sobald mehr als 7 Dateien vorliegen. Die Dateien müssen dabei schon passend geordnet vorliegen, z.B.
backup1.zip
backup2.zip
backup3.zip
…
backup9.zip
#!/bin/bash # remove old backups automatically # Version 1.0 - 03.04.2014 # https://www.denniswilmsmann.de/2014/04/alte-backups-unter-linux-automatisch-loeschen/ # how many backups should be kept? let maxcount=7 let counter=0 for backupfile in /var/data/my-ftp-backup-folder/*; do let counter=$counter+1 echo $backupfile done echo "Backup count:" $counter if test $counter -gt $maxcount; then echo "Too many backups, forcing deletion..." let newcounter=0 for deletefile in /var/data/my-ftp-backup-folder/*; do let newcounter=$newcounter+1 # echo "newcounter" $newcounter let temp=$counter-$maxcount # echo "temp" $temp if test $newcounter -le $temp; then rm $deletefile echo "Deleting file" $deletefile fi done else echo "Nothing to do." fi
Falls Dateien gelöscht werden, wird der betroffene Dateiename ausgegeben. Falls 7 (oder weniger) Dateien vorliegen, wird die Meldung „Nothing to do.“ ausgegeben. Ich lasse das Script täglich als cronjob laufen, um zu vermeiden, dass mein Backupverzeichnis vollläuft.
Funktioniert zuverlässig. 🙂 In dem Beispiel oben mit den Backups von 1 bis 9 löscht das Script also backup1.zip und backup2.zip.
Hi,
Ich bin leider noch nicht so der Script/Programmierprofi deshalb hoffe ich auf Hilfe für meinen Homeserver 🙂
Das Script hier gefällt mir schon echt gut 🙂
Frage:
Löscht das Script dann alle Backupfiles wenn count = 7 erreicht hat? Oder nur die „alten“ bis wieder der maximal Wert von 7 erreicht (bzw. nicht überschritten) wurde?
Folgendes Konstrukt möchte ich gerne abdecken.
1. Es wird jeden Tag ein DB-Dump-Backup auf ein externes Laufwerk erstellt.
2. Es sollen jedoch immer die 7 neusten Backups auf der externen HDD aufgehoben werden. Sodass Backup 8… 9 usw. gelöscht werden kann.
3. Alle gelöschten Aktionen sollen in einem Logfile hinterlegt werden um die gelöschten Aktionen + Zeitstempel nachzuvollziehen bzw. würde ich mir gerne daraus wöchentliche Log-Reports schicken lassen.
4. Das Aufräumscript wird einmal in der Woche per Cronjob angestoßen.
Kannst du so ein Script auf deinen Blog posten sodass ich nur noch meine Variablen einsetzen muss? 😀 😀 Das wäre der Hammer 😀
VG
Jerome
Deine Frage kann ich dir beantworten: Sobald mehr als 7 Dateien vorliegen, werden die ältesten gelöscht.
Beispiel mit count=2
Backup1-20140601
Backup2-20140602
Backup3-20140603
Das Script würde dann Backup1-20140601 löschen.
Dein gewünschtes Script kann ich dir nicht einfach mal so basteln.