GNU/Linux >> Tutoriales Linux >  >> Linux

Buscar y eliminar archivos con una fecha específica

Puedes usar find . Calcule la fecha según 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, buscar archivos creados 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 mtime , o la hora de la última modificación, y ctime que es el tiempo de "cambio", actualizado en cualquier cambio en el inodo. Asumiré que desea la hora 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 1 , pero 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 tiene -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, agregue el -name "DBG_A_sql*" necesario 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 tal, 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

Linux
  1. ¿Obtener todos los archivos que han sido modificados en una fecha específica?

  2. ¿Cómo obtener solo archivos creados después de una fecha con Ls?

  3. Encuentre archivos y péguelos (con espacios)

  4. Encontrar archivos ejecutables usando ls y grep

  5. Eliminar archivos con rm usando find y xargs

Cómo encontrar una cadena o palabra específica en archivos y directorios

Buscar comando en Linux (Buscar archivos y directorios)

Cómo encontrar recursivamente y enumerar los archivos por fecha en Linux

Encuentra archivos perdidos con Scalpel

Cómo encontrar archivos grandes de Linux con los comandos find y du

Encuentre archivos y directorios en Linux fácilmente