NOTICIAS SOBRE LINUX
10 meneos
96 clics

Cómo eliminar archivos anteriores o posteriores a N días usando find (con ejemplos adicionales) (ENG)

Este artículo explica cómo eliminar archivos más antiguos o más nuevos que N días, con ejemplos adicionales, como hacer coincidir solo archivos con una extensión en particular, y más. Para esto usaremos el comando "find", una herramienta de línea de comandos para buscar archivos en un directorio.

| etiquetas: find , borrado programado , bash , terminal , linux , gnu , find
Que peligro. Hacer esto en tu home o /. La lias gorda seguro
El comando "find", de los primitivos de UNIX. Es la leche. Hace cualquier cosa, como McGyver. El problema es que para expresiones booleanas la sintaxis es una auténtica basura.
Con GNU find: (-mtime N -o -mtime -N) -delete

El titular al principio no lo entendí bien e interpretaba posteriores a 10 días a partir de una fecha concreta, lo cual requeriría usar -newermt "MM/DD/YYYY+10 days", quedando así:

(-newermt "MM/DD/YYYY+10 days" -o -newermt "MM/DD/YYYY-10 days") -delete

Es decir, borrar archivos que se hayan modificado en un «radio» de 10 días en torno a una fecha concreta.

Pero en realidad se refiere a borrar archivos modificados en un plazo inferior a los últimos 10 días o bien en un plazo superior a 10 días anteriores. Es decir, excluir a los archivos modificados en los últimos 10 días. Lo cual viene bien para vacíar registros (logs) antiguos.
#4
Para un rango de fechas sería:
\( \! -newermt "MM/DD/YYYY+10 days" -a -newermt "MM/DD/YYYY-10 days"\) -delete
Sólo disponible en GNU y BSD find.
Me dejé el símbolo de exclamación.
En vez de usar -exec que es lentísimo yo hago -print0 y le pasó la salida a xargs -0
Y antes de usar -delete o similar siempre hacer -print por si acaso. Más vale prevenir que cepillarte medio disco duro sin querer
El cálculo de los días de find puede ser confuso: son días completos con sus 24 horas, no días de calendario.
Yo estoy aburguesado y tiro siempre de catfish a la hora de buscar archivos (el cual me parece que usa find), pero para algunas cosas, como por ejemplo usar la raspberry por ssh el find sigue siendo muy buen programa (como el "bc" que a veces me es más útil y rápido de usar que el "galculator")
yo le tengo un terror a eso de que un comando borre archivos sin que me los liste explícitamente previamente y pidiéndome confirmación...
Dependerá de la situación en la que quieras este script pero si se trata de un uso doméstico, donde apenas hay una necesidad continua de borrado de archivos, preferiría que se usase un find y que los que cumplan la antiguedad los mueva a una carpeta con toda su jerarquía de subcarpetas del archivo para saber de dónde viene, y que el usuario los borre manualmente...
#9
Las opciones -ok y -okdir piden confirmación.
#10 ya, pero esto es un script automatico, no un comando lanzado en terminal por el usuario

menéame