Creé un script para ejecutar copias de seguridad automáticas en mi servidor CentOS 7.
Las copias de seguridad se almacenan en el directorio /home/backup. El script funciona, pero ahora me gustaría incorporar una forma de contar los archivos después de que se realiza la copia de seguridad y, si el número es mayor a 5, eliminar la copia de seguridad más antigua.
A continuación se muestra lo que tengo para mi secuencia de comandos de respaldo.
#!/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
Gracias
-Mike
Respuesta aceptada:
Podría mirar set -- /home/backup/databasebk_*
y mientras $#
es mayor que cinco, elimine un archivo.
Entonces el código sería similar a
set -- /home/backup/databasebk_*
while [ $# -gt 5 ]
do
echo "Removing old backup $1"
rm "$1"
shift
done
Esto funciona porque los nombres de archivo que eligió están automáticamente en el orden "más antiguo primero".
Por coherencia, establecería una variable (normalmente la llamo BASE
pero puedes llamarlo como quieras)
Entonces
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