Programar eliminar archivos con x días (px: para copias antiguas)
Bienvenidos a VerTutoriales.com, siguiendo con la administración de servidores Linux. Hoy os explico como realizar una eliminación de archivos con varios días determinados de un servidor, en mi caso implementado dentro de un fichero Bash para ejecutarlo como tarea programada con Cron.
Sino sabes que son los archivos bash léete este párrafo. Estos archivos bash en sistemas linux sirven para poder procesar varias líneas de ejecución, a la vez de poder incluso utilizar variables dentro del mismo para reutilizarlo en el mismo fichero. Por decir, incluso pueden recibir parámetros y que sean utilizados dentro de su ejecución. Aunque en este tutorial no vamos a profundizar tanto, siempre es interesante saber lo que puede hacer para que luego cada uno investigue por su cuenta. Dicho esto, vamos a ver el fichero bash que me preparé para eliminar una copia de seguridad a partir de x días de antigüedad.
#!/bin/bash find /backup/*.zip -mtime +1 -type f -exec rm -f \{\} \;
Find sirve para buscar archivos, en nuestro caso, dentro de la carpeta backup, buscamos todos los archivos con extensión zip que utilizamos para nuestras copias de seguridad, pero con el parámetro -mtime decimos que tengan más de +1 día (es decir, que se guarden 2 copias antiguas) y luego ejecutamos con el parámetro -exec otro comando diferente para los archivos encontrados, en este caso un rm -f, que lo que hace es eliminar sin preguntar (-force), en otras palabras, eliminar todos las copias con más de 2 días que existan en nuestro servidor. Si queréis copias de más tiempo en el mismo servidor, solo tenéis que ampliar el +1 por los días que queráis.
Esto a su vez, lo hemos metido en el archivo bash, no es más que guardarlo en un archivo de texto. Aunque esto entiendo que ya deberá de estar en conocimiento, decir que se utiliza algún editor como vim o nano y guardarse ese par de líneas para que se identifique como tal.
Para ejecutarlo solo escribir bash nombredelscriptcreado.sh
Tened cuidado a la hora de ejecutar el script, ya que como he comentado, hay un comando de eliminación con force, por lo que si el comando está erroneo, puedes llegar a eliminar archivos no deseados y armarla parda 🙂
Espero que os sirva, yo esto me lo dejo aquí para reutilizar en el futuro. Por terminar, decir que este comando lo utilizo dentro de un script mucho más amplio que realiza la copia de seguridad de uno de mis servidores web, por lo que iré ampliando la información para que tengáis el script completo por si os interesa.
Si tenéis cualquier duda abajo tenéis los comentarios para realizar la consulta. Si os gusta agradezco que lo compartáis o al menos pongáis un «gracias» en los comentarios 🙂
Pingback: Copia de seguridad de un servidor a otro por ssh utilizando curl | Vertutoriales
Hola gracias por el script , viene bien para un novato como yo, pero tengo una duda ¿Qué función tiene la ultima parte: \{\} \; ? el punto y coma digo yo que será par finalizar la linea. Gracias.
Hola Carlos, 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 por el aporte Pablo 😉