Me gustaría que un comando de Linux encuentre archivos modificados en los últimos n
segundos.
¿Hay un script de shell u otra herramienta que pueda ejecutar desde la interfaz de línea de comandos o GUI?
Me gustaría que un comando de Linux encuentre archivos modificados en los últimos n
segundos.
¿Hay un script de shell u otra herramienta que pueda ejecutar desde la interfaz de línea de comandos o GUI?
Respuestas:
Use el comando de búsqueda de esta manera:
find . -name "*.txt" -mtime -60s
Para encontrar todos los *.txt
archivos modificados en los últimos 60 segundos.
-mtime
. Tampoco es "60" incluso una opción válida en POSIX o GNU find. El argumento para -mtime
es un número que especifica la cantidad de períodos de 24 horas cuando se modificó un archivo.
La solución con mtime especificando segundos no funciona en mis sistemas Linux que usan find --version
== find (GNU findutils) 4.4.2
.
Obtuve el siguiente error:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'
Sin embargo, puedo usar -mmin
(para modificar en los últimos m minutos), y puede tomar un argumento decimal; por ejemplo, lo siguiente busca archivos modificados en los últimos 30 segundos.
find . -mmin 0.5
Así por ejemplo; creando archivos modificados por última vez 1s, 6s, 11s, ... durante los últimos 120 segundos, este comando encuentra:
mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago
Entonces, si realmente lo necesita en segundos, puede hacer algo como:
localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago
Similar a lo que sugirió Glenn, si desea encontrar todo modificado, digamos, en el tiempo durante el cual se ejecutó un proceso de instalación, podría ser más fácil hacer algo como:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
Entonces no tienes que hacer el cálculo del tiempo; solo encuentras que las cosas cambiaron después del archivo de punto de control.
La forma más sencilla de hacer esto es:
find . -name "*.txt" -newermt '6 seconds ago'
La -mtime -60s
opción, mencionada en una respuesta, no funciona en muchas versiones find
, incluso en 2016. -newermt
Es una opción mucho mejor para nosotros. Puede analizar muchos formatos de fecha y hora diferentes.
Un método alternativo que utiliza mmin
es este:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
Es posible que esta opción no funcione para todas las find
versiones.
Si está monitoreando un directorio en busca de cambios en los archivos, probablemente desee usar inotify-tools en lugar de algún bucle de sondeo infinito.
find: missing argument to `-mtime'
. Sin embargo, puedo obtener el comportamiento deseado usando -mmin y un argumento decimal. No pude encontrar ninguna referencia en la página de manual para encontrar para usars
como argumento.