Ho creato uno script per eseguire backup automatici sul mio server CentOS 7.
I backup vengono archiviati nella directory /home/backup. Lo script funziona, ma ora vorrei incorporare un modo per contare i file dopo il backup e se il numero è superiore a 5, eliminare il backup più vecchio.
Di seguito è riportato ciò che ho per il mio script di backup.
#!/bin/bash
#mysqldump variables
FILE=/home/backup/databasebk_!`date +"Y-%m-%d_%H:%M"`.sql
DATABASE=database
USER=root
PASS=my password
#backup command process
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}
#zipping the backup file
gzip $FILE
#send message to the user with the results
echo "${FILE}.gz was created:"
ls -l ${FILE}.gz
# This is where I would like to count the number of files
# in the directory and if there are more than 5 I would like
# to delete the oldest file. Any help is greatly appreciated
Grazie
-Mike
Risposta accettata:
Puoi guardare set -- /home/backup/databasebk_*
e mentre $#
è maggiore di cinque, elimina un file.
Quindi il codice sarebbe simile a
set -- /home/backup/databasebk_*
while [ $# -gt 5 ]
do
echo "Removing old backup $1"
rm "$1"
shift
done
Funziona perché i nomi dei file che hai scelto sono automaticamente nell'ordine "dal meno recente".
Per coerenza imposterei una variabile (normalmente la chiamo BASE
ma puoi chiamarlo come preferisci)
Quindi
BASE=/home/backup/databasebk_
FILE=${BASE}!`date +"%Y-%m-%d_%H:%M"`.sql
....
set -- ${BASE}*
while [ $# -gt 5 ]
do
echo "Removing old backup $1"
rm "$1"
shift
done