¿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 lsinotifytoolspaquete usa lainotifyfunció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 -ltpara ver archivos nuevos en la parte superior de la lista ols -ltrpara ver archivos nuevos en la parte inferior. Luego, para resaltar esos nuevos archivos, usewatch -dpara resaltar los cambios en la última actualización owatch --differences=cumulativepara resaltar todos los cambios desde quewatchse inició.watch tail lsowatch head lsmostrará 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 -fsiguiente manera cambios en el archivo. Su orden original fue quewatchno lo hizo muy bien. Creo que lo hará, si el comando que ejecuta está diseñado adecuadamente. A veces tiene que usarsh -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.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. Ú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
iperder 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
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: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:Aquí hay otro ejemplo de mostrar contenido de todos los
test*archivos recién creados en/tmp:fuente