Zum Inhalt

Alte Backups unter Linux automatisch löschen

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.

Published inJavaLinux

2 Comments

  1. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.