Seu método de excluir backups antigos é bom e, na minha opinião, é melhor do que renomear arquivos. A coisa mais feia sobre isso é a longa cadeia de canos, que serve pouco propósito em seu exemplo, mas torna a linha muito longa. Eu escreveria usando um bloco de { ... }
assim:
presentdate="'date +%d-%m-%Y_%H:%M.%S'"
basedir="/var/db_my_backup"
{
mysqldump -u username -ppassword --all-databases | gzip -9 -c > $basedir/mysqlbackup.$presentdate.sql.gz
find -L $basedir/'*' -type f -mtime +7 -exec rm -v {} \;
chown -vR user:group $basedir
cat <<EOF
Copy of MySQL successfully placed in $basedir directory as file named mysqlbackup.$presentdate.sql.gz.
Now it is ready to be moved to QNAP backup device as scheduled.
EOF
} 2>&1 | /bin/mail -s "Report from scheduled job for mysqldumps" root
O 2>&1
perto do final é incluir a saída de erro no email, você pode removê-lo se não quiser. Eu também adicionei alguns -v
flags para mais verbosidade.
Como um comentarista coloca, find
não causa erros estranhos se você usá-lo corretamente. Houve um erro em seus parâmetros para find
, usando exec
em vez de -exec
. Para obter os parâmetros certos, jogue com ele um pouco, enquanto estiver lendo man find
.