GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar archivos creados entre dos veces?

Bastante simple, dado que etiquetó Linux, tiene el stat comando disponible, que extraerá la hora de modificación de un archivo, y el GNU date 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 el -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 `buscar`

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 partes 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) llamada de sustitución de comando 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 al 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 le dice a 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.

Una vez que tengamos 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 extraer registros entre dos marcas de tiempo?

  2. ¿Cómo sincronizar archivos entre dos controles remotos?

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

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

  5. ¿Líneas comunes entre dos archivos?

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 eliminar archivos enumerados en otro archivo en Linux

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

¿Cómo eliminar archivos .fuse_hidden*?