Eliminar archivos antiguos automáticamente

nullBuscando una forma de eliminar los archivos de cierta antigüedad de un directorio me topé con una “receta” (¿alguien sabe cómo traducir decentemente “tip”?) en la web Command-line Fu.

El problema es que no me funciona (el autor parece haberla colocado incompleta a tenor del \ que aparece al final de la misma) y es por ello que he optado por publicar una alternativa a dicho comando por si a alguno le puede ser de utilidad.

Para borrar todos los ficheros con más de 5 días de antiguedad del directorio /ruta_directorio deberemos ejecutar un

rm -f `find /ruta_directorio -mtime +5`

NOTA: Obsérvese que se hace uso del parámetro -f por lo que el sistema borrará los ficheros que cumplan la condición sin pedir confirmación. Si se quiere confirmar el borrado bastará con quitarlo; el “problema” es que nos preguntará qué hacer PARA CADA fichero.

De esta solución cabe destacar:

  1. El uso de las comillas ` como un medio de ejecutar un comando dentro de otro.
  2. El uso del parámetro -mtime del comando find para filtrar por la fecha de modificación. Para mayor información os recomiendo que consultéis los parámetros de find pues cuenta con variantes como atime, ctime y similares que os permiten saber, entre otras cosas, cuándo fue accedido el fichero por última vez.

10 comentarios en “Eliminar archivos antiguos automáticamente

  1. Pingback: Bitacoras.com
  2. esmar dijo:

    Hola,
    al comando de commandlinefu le faltaba el ; que se “escapa” con el \

    find /dir_name -mtime +5 -exec rm {} \;

    Acabo de descubrir tu blog y me encanta, hasta me he repasado las entradas antiguas 🙂

    Un saludo y gracias por compartir la información con todos.

  3. Noname dijo:

    Aparte, el comando find admite el -delete, y así te ahorras el tener que estar con el -exec rm y esas cosas, eso implica que no forkearas una shell por fichero, lo cual interesa cuando tienes que mandar a borrar un fleje de ficheros.

  4. Gustavo dijo:

    Podés usar $(…) en lugar de `…` porque a veces es confuso encontrar este tipo de comillas en el teclado por lo que la línea te quedaría como
    rm -f $(find /ruta_directorio -mtime +5)
    Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s