Cada 3 horas, el script se ejecutará y realizará una copia de seguridad de una carpeta "FUENTE" y la guardará junto con las otras copias de seguridad del día actual en la carpeta "mes-día-año", por ejemplo, "24-03-13". Cuando llega un nuevo día, crea una nueva carpeta con la nueva fecha y elimina todas las copias de seguridad excepto la última de la carpeta del día anterior. Aquí es donde está el problema, no se eliminan las carpetas antiguas del día anterior. ¿Alguna idea de por qué?
#!/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
Respuesta1
if [ ! -d "$DIR/$YESTERDAY" ]; then
Éste no se ejecuta. Estás probando si NO hay un directorio.
Debería ser
if [ -d "$DIR/$YESTERDAY" ]; then