GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cómo eliminar archivos creados entre dos veces?

Tengo una carpeta en la que hago una copia de seguridad de mis bases de datos y quiero eliminar todas las copias de seguridad creadas entre las 11 a. m. y las 3 p. m. y no importa qué día sea, ¡este es el truco!

Encontré este comando muy útil, pero no en mi caso de uso:

find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete

¡Pero aquí me obliga a un intervalo entre dos fechas! Quiero eliminar solo las copias de seguridad creadas entre dos momentos específicos.

Respuesta aceptada:

Bastante simple, dado que etiquetó Linux, tiene el stat comando disponible, que extraerá la hora de modificación de un archivo y la date de GNU comando, que extraerá la hora de un momento dado:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' 
  sh {} ; -ls

Si los resultados parecen correctos, entonces:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' 
  sh {} ; -delete

Aquí hay una prueba con -ls versión:

$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} ; -ls
1705096    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./11am
1705097    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./12pm

Crédito a Kusalananda por escribir la excelente respuesta que seguí, en:Comprender la opción -exec de `find`

Tenga en cuenta que no quiero el {} + versión de find aquí, como queremos el -exec los resultados serán por archivo, de modo que solo eliminemos los archivos que coincidan con el intervalo de tiempo.

El script de shell incrustado tiene dos piezas principales:determinar la marca de tiempo de "hora" del archivo y luego devolver el éxito o el fracaso según el rango. La primera parte se realiza en dos piezas. A la variable se le asigna el resultado de la sustitución del comando; el comando debe leerse al revés:

  1. $(stat -c %Y "$1") — esta (segunda) sustitución de comando llama a stat en el $1 parámetro del script de shell incrustado; $1 fue asignado por find como uno de los nombres de ruta que encontró. La opción %Y del stat El comando devuelve el tiempo de modificación en segundos desde la época.
  2. date -d @ ... +%-H — esto toma los segundos desde la época de la sustitución del comando anterior y pregunta date para darnos la porción de Horas de ese tiempo; el @ la sintaxis dice date que le estamos dando segundos desde la época como formato de entrada. Con el - opción en el formato de salida de la fecha, le decimos a la fecha de GNU que no rellene el valor con cualquier cero inicial. Esto evita cualquier mala interpretación octal posterior.
Relacionado:Debian Lenny:¿Quiere que Splashy comience directamente después de Grub2?

Una vez que tenemos el $h Hora variable asignada, usamos el operador condicional de bash [[ para preguntar si ese valor es mayor o igual a 11 y también estrictamente menor que 15.


Linux
  1. Cómo transferir archivos entre dos computadoras usando los comandos nc y pv

  2. Cómo eliminar archivos ENORMES (100-200 GB) en Linux

  3. Cómo crear archivos de cierto tamaño en Linux

  4. ¿Cómo se eliminan archivos anteriores a la fecha específica en Linux?

  5. ¿Cómo eliminar archivos creados entre dos veces?

Cómo usar el comando de fecha en Bash Scripting en Linux

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo comparar dos archivos en la terminal de Linux

Cómo Rsync archivos entre dos servidores Linux automáticamente

Cómo quitar/eliminar archivos en Linux usando el comando rm

Cómo contar archivos en el directorio en Linux