¿Hay algún comando de Linux incorporado para mostrar el contenido de un directorio en tiempo real?

8

¿Hay algún comando de Linux incorporado para mostrar el contenido de un directorio en tiempo real? Similar al comando "tail -f file_name" que muestra el contenido de un archivo en tiempo real.

Goku__
fuente
44
¿Qué talwatch -n1 ls
Joe
Echa un vistazo a watch ( linfo.org/watch.html )
David Segonds
44
No está completamente integrado, pero el inotifytoolspaquete usa la inotifyfunción de Linux para permitir ver los eventos de creación de archivos a medida que ocurren.
chepner

Respuestas:

6

puedes hacer esto usando watch. No es completamente en tiempo real, pero lo suficientemente cerca (hasta una décima de segundo):

watch -n0.1 ls

del manual:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.
Chris Maes
fuente
1
Si desea ver los archivos nuevos con mayor claridad, use ls -ltpara ver archivos nuevos en la parte superior de la lista o ls -ltrpara ver archivos nuevos en la parte inferior. Luego, para resaltar esos nuevos archivos, use watch -dpara resaltar los cambios en la última actualización o watch --differences=cumulativepara resaltar todos los cambios desde que watchse inició.
garyjohn
@ jm666 - watch tail lso watch head lsmostrará los últimos archivos con las opciones de pedido correctas de ls , como -lt con head o -ltr con tail .
AFH
@ jm666 - Por supuesto que no tiene sentido si se toma literalmente: lo estaba usando como una abreviatura parawatch {options} 'ls {options} | tail {options}'
AFH
@ jm666: La solicitud era para un comando que sigue los cambios en un directorio de la tail -fsiguiente manera cambios en el archivo. Su orden original fue que watchno lo hizo muy bien. Creo que lo hará, si el comando que ejecuta está diseñado adecuadamente. A veces tiene que usar sh -cpara ajustar un comando más complicado. Miré brevemente inotify-tools y no vi un comando que mostrara los cambios en un directorio, no solo los eventos aplicados a un directorio.
garyjohn
2

Escribí esto, espero que esto sea lo que necesitabas. No es un built-in Linux command, pero usa solo programas comunes presentes en la mayoría de los cuadros de UNIX.

Ajuste el sleeptiempo según sea necesario. Usaría un valor de al menos 2 segundos. Úselo cmd="ls"para una estructura no recursiva o cmd="find DIRNAME"para buscar recursivamente. Tenga en cuenta que en el último caso, obtendrá un DIRNAME/prefijo para todos los archivos y directorios.

 echo "" | awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'
NuTTyX
fuente
Encontré un error que hizo iperder valor después de hacer un bucle que hizo que el script mostrara todo como nuevo cada vez en algunas máquinas Linux
NuTTyX
1

Esto es tan simple después de que lo sé.

watch -d dir_name
Goku__
fuente
0

Puede usar inotifytoolsy sus utilidades de línea de comandos.

Puede usarlo inotifypara monitorear el directorio, y devolverá eventos para el directorio en sí y para los archivos dentro del directorio.

Otra herramienta que se puede usar es inotifywatch:

sudo inotifywatch -v -r /foo

Puede agregar -rpara ver todos los subdirectorios de forma recursiva. Sin embargo, esta solución no detecta cambios en los archivos recién creados .

Entonces otra solución es usar inotifywait:

inotifywait -m --format "%f" /foo

Aquí hay otro ejemplo de mostrar contenido de todos los test*archivos recién creados en /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
kenorb
fuente