¿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.
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.
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") } }'
watch -n1 ls
inotifytools
paquete usa lainotify
función de Linux para permitir ver los eventos de creación de archivos a medida que ocurren.Respuestas:
puedes hacer esto usando
watch
. No es completamente en tiempo real, pero lo suficientemente cerca (hasta una décima de segundo):del manual:
fuente
ls -lt
para ver archivos nuevos en la parte superior de la lista ols -ltr
para ver archivos nuevos en la parte inferior. Luego, para resaltar esos nuevos archivos, usewatch -d
para resaltar los cambios en la última actualización owatch --differences=cumulative
para resaltar todos los cambios desde quewatch
se inició.watch tail ls
owatch head ls
mostrará los últimos archivos con las opciones de pedido correctas de ls , como -lt con head o -ltr con tail .watch {options} 'ls {options} | tail {options}'
tail -f
siguiente manera cambios en el archivo. Su orden original fue quewatch
no lo hizo muy bien. Creo que lo hará, si el comando que ejecuta está diseñado adecuadamente. A veces tiene que usarsh -c
para 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.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
sleep
tiempo según sea necesario. Usaría un valor de al menos 2 segundos. Úselocmd="ls"
para una estructura no recursiva ocmd="find DIRNAME"
para buscar recursivamente. Tenga en cuenta que en el último caso, obtendrá unDIRNAME/
prefijo para todos los archivos y directorios.fuente
i
perder valor después de hacer un bucle que hizo que el script mostrara todo como nuevo cada vez en algunas máquinas LinuxEsto es tan simple después de que lo sé.
fuente
Puede usar
inotifytools
y sus utilidades de línea de comandos.Puede usarlo
inotify
para 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
:Puede agregar
-r
para 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
:Aquí hay otro ejemplo de mostrar contenido de todos los
test*
archivos recién creados en/tmp
:fuente