Esiste un comando Linux incorporato per visualizzare i contenuti di una directory in tempo reale?


8

Esiste un comando Linux incorporato per visualizzare i contenuti di una directory in tempo reale? Simile al comando "tail -f nome_file" che visualizza i contenuti di un file in tempo reale.


4
Che ne diciwatch -n1 ls
Joe,

Dai un'occhiata a watch ( linfo.org/watch.html )
David Segonds,

4
Non del tutto integrato, ma il inotifytoolspacchetto utilizza la inotifyfunzionalità di Linux per consentire la visione degli eventi di creazione dei file in tempo reale.
Chepner,

Risposte:


6

puoi farlo usando watch. Non è completamente in tempo reale, ma abbastanza vicino (fino a un decimo di secondo):

watch -n0.1 ls

dal manuale:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.

1
Se vuoi vedere nuovi file più chiaramente, usa ls -ltper vedere i nuovi file in cima alla lista o ls -ltrper vedere i nuovi file in fondo. Quindi, per evidenziare quei nuovi file, utilizzare watch -dper evidenziare le modifiche nell'ultimo aggiornamento o watch --differences=cumulativeper evidenziare tutte le modifiche da quando è watchstato avviato.
garyjohn,

@ jm666 - watch tail lso watch head lsmostrerà i file più recenti con le opzioni di ordinamento ls corrette , come -lt con testa o -ltr con coda .
AFH,

@ jm666 - Ovviamente non ha senso se preso alla lettera: lo stavo usando come scorciatoia perwatch {options} 'ls {options} | tail {options}'
AFH,

@ jm666: la richiesta era per un comando che segue le modifiche a una directory come tail -fsegue modifiche al file. Il tuo comando originale era che watchnon ha funzionato molto bene. Penso che lo farà, se il comando che esegue è realizzato in modo appropriato. A volte devi usare sh -cper avvolgere un comando più complicato. Ho esaminato brevemente inotify-tools e non ho visto un comando che mostrasse le modifiche a una directory, non solo gli eventi applicati a una directory.
Garyjohn,

2

Ho scritto questo, spero che questo sia ciò di cui avevi bisogno. Non è un built-in Linux command, ma utilizza solo programmi comuni presenti nella maggior parte delle caselle UNIX.

Regola il sleeptempo secondo necessità. Vorrei utilizzare un valore di almeno 2 secondi. Utilizzare cmd="ls"per la struttura non ricorsiva o cmd="find DIRNAME"per la ricerca ricorsiva. Nota che nell'ultimo caso otterrai un DIRNAME/prefisso per tutti i file e le directory.

 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") } }'

Trovato un bug che ha fatto iperdere valore dopo aver fatto un ciclo che ha reso lo script mostrare tutto come nuovo ogni volta su alcune macchine linux
NuTTyX

1

Questo è così semplice dopo che lo so.

watch -d dir_name

0

È possibile utilizzare inotifytoolse le relative utilità della riga di comando.

È possibile utilizzare inotifyper monitorare la directory e restituirà eventi per la directory stessa e per i file all'interno della directory.

Un altro strumento che può essere utilizzato è inotifywatch:

sudo inotifywatch -v -r /foo

È possibile aggiungere -rper guardare ricorsivamente tutte le sottodirectory. Tuttavia, questa soluzione non rileva le modifiche sui file appena creati .

Quindi un'altra soluzione è usare inotifywait:

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

Ecco un altro esempio di come mostrare il contenuto di tutti i test*file appena creati in /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.