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:
$(stat -c %Y "$1")
-- esta (segunda) llamada de sustitución de comandostat
en el$1
parámetro del script de shell incrustado;$1
fue asignado porfind
como uno de los nombres de ruta que encontró. La opción %Y alstat
El comando devuelve el tiempo de modificación en segundos desde la época.date -d @ ... +%-H
-- esto toma los segundos desde la época de la sustitución del comando anterior y preguntadate
para darnos la porción de Horas de ese tiempo; el@
la sintaxis le dice adate
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.