Tengo un nuevo requisito para purgar archivos de volcado de MySQL que tienen más de 30 días. Los archivos utilizan una convención de nomenclatura de "all-mysql-YYYYMMDD-HHMM.dump". Los archivos se encuentran en el sistema de archivos montado en SAN, por lo que la restauración no es un problema, pero desafortunadamente el espacio en disco es limitado y se llena rápidamente, por lo que requiere una intervención humana frecuente.
Ejemplo de nombres de archivos
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Mi primer pensamiento fue usar "find" dentro de un script por lotes con -mtime +30, sin embargo, los tiempos de modificación no se pueden garantizar y algunos de los archivos más antiguos podrían evadir la fecha de purga :)
Creé el siguiente script BASH, pero esperaba que hubiera una forma más limpia de realizar esta operación.
#!/bin/bash
STARTING_DIR=$(pwd)
FILE_PREFIX=all-mysql-
BACKUP_DIR=/opt/backup/mysql/dumps
ARCHIVE_WINDOW_DAYS=30
cd $BACKUP_DIR
# Create YYYYMMDD datestamp for Today - $ARCHIVE_WINDOW_DAYS
ARCHIVE_WINDOW_IN_SECS=$(echo "$(date +%s) - (${ARCHIVE_WINDOW_DAYS} * 86400)" | bc)
PURGE_BEFORE_DATE=$(date -d @${ARCHIVE_WINDOW_IN_SECS} +%Y%m%d)
for backup_file in $FILE_PREFIX*
do
# Trim prefix, time portion of date stamp, and file extension
# from $backup_file to allow numeric comparison against YYYYMMDD
backup_trim_tmp=${backup_file#${FILE_PREFIX}}
backup_trimmed=${backup_trim_tmp%-****.dump}
if [ ${PURGE_BEFORE_DATE} -gt ${backup_trimmed} ]
then
rm $backup_file
fi
done
cd $STARTING_DIR
logrotate
una solución más limpia?Respuestas:
Otra forma de eliminar todos excepto los últimos 30 archivos:
O aquí hay una versión más corta del guión en la publicación original:
fuente
Si desea eliminar todo excepto los últimos 30 archivos:
Eso cumpliría su requisito siempre que haya una copia de seguridad por día, y el esquema de nombres permanezca como está (es decir, orden alfabético = orden cronológico, sin espacios en los nombres de archivo).
Usted solicitó específicamente una frase en uno de sus comentarios. Personalmente me gusta escribir más cosas. Este revestimiento es un poco peligroso (si el sed falla, todo se elimina).
fuente