Linux: script para borrar archivos backup mas viejos de 7 dias
Llevaba un tiempo queriendo dejar un poco mejor hecho el tema de los backups del blog para evitar quedarme colgado sin un backup en condiciones y no sabía como hacer para evitar llevar el disco de copias viejas y llegar al punto de que el vps me diera error por no tener suficiente espacio.
Había probado varios scripts para hacer backup pero la mayoría de ellos eran sencillos para generar los ficheros de las copias, pero no se encargaban de borrar los archivos de backup de mas de X días, con el fin de tener siempre alguna copia fresca y borrar las ya viejas, la base de datos es posible dejar mas días de copia ya que de momento, ocupa muchísimo menos.
Para aquellos que quieran borrar archivos de backup (la verdad es que puede ser para cualquier tipo de archivo, pero en mi caso, como estoy con los backups) que sean mas viejos de X días, la linea de comando a ejecutar es:
find /home/user/backups/backup* -mtime +7 -exec rm {} \;
En el comando anterior, con «find» localizamos los archivos que tengan de fecha «-mtime» que sean mas viejos de 7 días «+7» y ejecuta la orden de consola de borrado de los ficheros mostrados en el resultado del anterior comando «-exec rm {}».
De esta manera garantizamos que nuestro directorio de backups no engorde y nos ocupe el sitio que tenemos contratado con para el alojamiento y evitar el fallo del servidor por falta del mismo.
Para poder automatizar la ejecución de dicho script, y no necesitar ejecutarlo manualmente cada día o cada X días, podemos añadirlo al cron (si nuestro hosting lo permite) y así lanzarlo a ciertas horas para así hacerlo sin tener que controlarlo, para ello, podemos añadir al cron la siguiente linea:
0 4 * * * find /home/user/backups/backup* -mtime +7 -exec rm {} \;
De esta manera, a las 4:00 am se ejecutará solo y siempre tendremos las copias preparadas y sin pasar de los días que queramos.
Ver comentarios (8)
Genio
Excelente !
Muchas gracias
Muchas gracias!!!! muy bueno me salvaste te dejo el comando si lo que se quiere hacer es moverlos:
"find /directorio origen/* -mtime +7 -exec mv -t /directorio destino {} +"
Puedes adicionar -delete
find /home/user/backups/backup* -mtime +7 -delete
una cosa a tener en cuenta es que con esto borras a x días atras, pero no borras el primer dia completo. Borra del primer día de la hora en la que nos encontramos hacia atrás.
Por lo que cuando trabajamos con procesos diarios con dependencias horaria esto no es correcto del todo.
Como dice en la explicación con el comando anterior, con “find” localizamos los archivos que tengan de fecha “-mtime” que sean mas viejos de 7 días “+7” y ejecuta la orden de consola de borrado de los ficheros mostrados en el resultado del anterior
Pero esos 7 días son desde la hora en la que ejecutamos, por ejemplo si lo lanzas a las 17:00, recuperará los ficheros anteriores a 7 días, contando 7 días desde las 17:00 de un dia a otro, por lo que borrara de las 17:00 hacia atrás hacia atrás.
Hola Eduardo, muy bueno juntar find con un cron!! Apuntado!! Solo un detalle: con find, según la versión, también puedes utilizar el parámetro delete para borrar.
También se puede especificar una fecha concreta siguiendo este formato:
find /SYSADMIT/* -type f -not -newermt "AAAA:MM:DD HH:MI:SS" -delete
Visto aquí: https://www.sysadmit.com/2019/08/linux-borrar-ficheros-por-fecha.html
Gracias Marcos, me ha servido.
Muchas gracias