Veraltete Datenbank-Backups löschen


Dank des Perl-Skripts von MySQLDumper laufen Datenbank-Backups bei mir vollautomatisch. Mit der Funktion des regelmäßigen Aufräumens war ich aber nicht ganz zufrieden. Ich wollte gerne, dass immer die zehn neuesten Backups behalten werden und von den älteren nur noch eins pro Woche. Das geht mit folgendem Bash-Skript:

#!/bin/bash # Get all konzertheld backup files reverse ordered (konzertheld_yyyy_mm_dd_hh_mm.sql.gz) FILES=`ls konzertheld_* -r` # Initiate i=0 LWNR=0 # Go for f in $FILES do i=`expr $i + 1` # skip first 10 backups if [ $i -gt 10 ] then # Get the database name by extracting the substring before the position of the first _ # echo ${f:0:`expr index "$f" _`-1} # Get the date part by extracting a 10 long substring from the position after the first _ DATUM=${f:`expr index "$f" _`:10} DATUM=${DATUM//_/-} # Get week number WNR=`date +%V -d $DATUM` # If we already had that week number this is an older backup from that week. Delete it! if [ $LWNR -eq $WNR ] then echo $f fi # Set the last week number to the current one. So if the next backup is from a different week it will be kept, if not, deleted. LWNR=$WNR fi done

So werden von den älteren immer alle bis auf eines aus einer Woche gelöscht. Wenn man nur automatisiert backupt, kann man das natürlich auch ohne die Wochennummer machen und einfach jedes siebte Ei jede siebte Datei löschen, aber mit der obigen Methode werden auch alte Backups gelöscht, die man mal manuell angelegt hat. So wie ich an Tagen, an denen alle zehn Minuten die Datenbank explodieren könnte, so dass ich ständig Backups anstoße...