Alle 3 Stunden wird das Skript ausgeführt und sichert einen Ordner „SOURCE“ und speichert ihn zusammen mit den anderen Sicherungen des aktuellen Tages im Ordner „Monat-Tag-Jahr“, z. B. „24.03.13“. Wenn ein neuer Tag beginnt, erstellt es einen neuen Ordner mit dem neuen Datum und löscht alle Sicherungen außer der letzten im Ordner des Vortages. Hier liegt das Problem, die alten Ordner vom Vortag werden nicht gelöscht. Irgendwelche Ideen, warum?
#!/bin/sh
DIR=/media/HDD
SOURCE=/home/eric/Creative/
DATE=$(date +"%m-%d-%Y")
YESTERDAY=$(date -d '1 day ago' +"%m-%d-%Y")
TIME=$(date +"%T")
DESTINATION=$DIR/$DATE/$TIME
SPACE=$(df -P $DIR | tail -1 | awk '{print $4}')
NEEDED=$(du -s $SOURCE | awk '{print $1}')
FOLDERS=$(find $DIR/* -maxdepth 0 -type d | wc -l)
# If there is not enough space, delete the oldest folder
if [ $NEEDED -ge $SPACE ]; then
ls -dt $DIR/* | tail -n +$FOLDERS | xargs rm -rf
fi
# If there is not a folder for today, create one
if [ ! -d "$DIR/$DATE" ]; then
mkdir $DIR/$DATE
# If there is a folder from yesterday, keep only one of its backups
if [ ! -d "$DIR/$YESTERDAY" ]; then
ls -dt $DIR/$YESTERDAY/* | tail -n +2 | xargs rm -rf
fi
fi
# Create the new backup directory
if [ ! -d "$DESTINATION" ]; then
mkdir $DESTINATION
fi
# Backup source to destination
rsync -a $SOURCE $DESTINATION
Antwort1
if [ ! -d "$DIR/$YESTERDAY" ]; then
Die Ausführung schlägt fehl. Sie testen, ob KEIN Verzeichnis vorhanden ist.
Es sollte sein
if [ -d "$DIR/$YESTERDAY" ]; then