Saltar al contenido

Buscar y eliminar archivos con una fecha específica

Haz todo lo posible por entender el código de forma correcta previamente a usarlo a tu proyecto si tdeseas aportar algo puedes compartirlo con nosotros.

Puedes usar find. Calcular la fecha de acuerdo a su requerimiento y uso,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print

Después de confirmar que los elimine,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete

Para empezar, encontrar archivos creado en un tiempo determinado es un poco difícil, ya que el tiempo de creación no suele guardarse en ningún lado o es difícil llegar a él. lo que tienes es mtimeo la hora de la última modificación, y ctime que es el tiempo de “cambio”, actualizado en cualquier cambio en el inodo. Asumiré que quieres el tiempo de modificación.


Encontrar archivos modificados en una fecha determinada resultó algo interesante, ya que find parece hacer que sea un poco difícil hacerlo bien con los archivos creados exactamente a la medianoche.

Si conocemos el tiempo relativo (es decir, fue ayer), podríamos usar
find -daystart -mtime 1pero encuentra el archivo modificado en la medianoche equivocada, Aug 8 00:00. Sin embargo, esto parece funcionar:

find dir/ -daystart -mtime +0 ! -mtime +1 -ls

Si no desea calcular el tiempo relativo, y su find posee -newerXY:

find dir/ -newermt 'Aug 7 00:00' ! -newermt 'Aug 8 00:00' -ls

Nuevamente, esto hace que los archivos creados exactamente a medianoche sean incorrectos, porque la comparación es “más nueva”, no “más nueva o tan antigua como”. Aunque si su sistema tiene una precisión de subsegundos para las marcas de tiempo, puede ser difícil dar con eso, pero sucede si prueba con archivos creados por touch

Una solución peluda a eso sería algo como esto:

find dir/ -newermt 'Aug 6 23:59:59.999999999' ! -newermt 'Aug 7 23:59:59.999999999' -ls

En cualquier caso, añade lo necesario. -name "DBG_A_sql*" para tomar sólo los archivos con el nombre correcto. Puedes reemplazar el -ls al final con -delete para eliminar los archivos en lugar de enumerarlos. (-ls, -delete y -newerXY existen al menos en GNU find y BSD find en OS X.)


Por supuesto, podría analizar la representación de texto de la fecha, pero ls hace que sea difícil hacerlo bien si algún bromista crea archivos con caracteres no imprimibles en ellos. Claro, los archivos de ejemplo no tienen nada de eso, pero en general, cualquiera podría crearlos, especialmente en /tmp.

(Aunque con | xargs rm simplemente perdería esos archivos, y dado que los nombres de los archivos no pueden contener barras, sería difícil para alguien señalar su rm a otro directorio).

Solo bash loop

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done

Sección de Reseñas y Valoraciones

Si te sientes suscitado, eres capaz de dejar un artículo acerca de qué te ha impresionado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *