Czy jest jakieś wbudowane polecenie Linuksa do wyświetlania zawartości katalogu w czasie rzeczywistym?

8

Czy jest jakieś wbudowane polecenie systemu Linux do wyświetlania zawartości katalogu w czasie rzeczywistym? Podobne do polecenia „tail -f nazwa_pliku”, który wyświetla zawartość pliku w czasie rzeczywistym.

Goku__
źródło
4
Co powiesz nawatch -n1 ls
Joe,
Spójrz na zegarek ( linfo.org/watch.html )
David Segonds
4
Nie do końca wbudowany, ale inotifytoolspakiet wykorzystuje inotifyfunkcję Linuksa, aby umożliwić oglądanie zdarzeń tworzenia plików w miarę ich występowania.
chepner

Odpowiedzi:

6

możesz to zrobić za pomocą watch. To nie jest całkowicie w czasie rzeczywistym, ale wystarczająco blisko (do jednej dziesiątej sekundy):

watch -n0.1 ls

z instrukcji:

-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
źródło
1
Jeśli chcesz wyraźniej widzieć nowe pliki, użyj, ls -ltaby zobaczyć nowe pliki na górze listy lub ls -ltrzobaczyć nowe pliki na dole. Następnie, aby podświetlić te nowe pliki, użyj, watch -daby podświetlić zmiany w najnowszej aktualizacji lub, watch --differences=cumulativeaby wyróżnić wszystkie zmiany od momentu watchuruchomienia.
garyjohn
@ jm666 - watch tail lslub watch head lspokaże najnowsze pliki z prawidłowymi opcjami zamawiania ls , takimi jak -lt z głową lub -ltr z ogonem .
AFH,
@ jm666 - Oczywiście to nonsens, jeśli potraktowane dosłownie: użyłem go jako skrótuwatch {options} 'ls {options} | tail {options}'
AFH
@ jm666: Żądanie dotyczyło polecenia, które śledzi zmiany w katalogu, jak tail -fnastępuje zmiany w pliku. Twoje pierwotne polecenie było takie, że watchnie działało to zbyt dobrze. Myślę, że tak będzie, jeśli uruchomione polecenie zostanie odpowiednio spreparowane. Czasami musisz użyć sh -cdo zawinięcia bardziej skomplikowanego polecenia. Patrzyłem krótko na inotify-tools i nie widziałem polecenia, które pokazywałoby zmiany w katalogu, a nie tylko zdarzenia zastosowane do katalogu.
garyjohn
2

Napisałem to, mam nadzieję, że tego właśnie potrzebujesz. To nie jest built-in Linux command, ale używa tylko popularnych programów obecnych w większości skrzynek UNIX.

Dostosuj sleepczas w razie potrzeby. Użyłbym wartości co najmniej 2 sekund. Użyj cmd="ls"dla struktury nierekurencyjnej lub cmd="find DIRNAME"do wyszukiwania rekurencyjnego. Zauważ, że w ostatnim przypadku otrzymasz DIRNAME/prefiks do wszystkich plików i katalogów.

 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
źródło
Znaleziony błąd, który powodował iobniżenia wartości po wykonaniu pętli, które złożyły wszystko skrypt Pokaż jako nowy za każdym razem na niektórych komputerach z systemem Linux
NuTTyX
1

To takie proste, kiedy to wiem.

watch -d dir_name
Goku__
źródło
0

Możesz użyć inotifytoolsi jego narzędzi wiersza polecenia.

Możesz użyć inotifydo monitorowania katalogu, a on zwróci zdarzenia dla samego katalogu i plików w katalogu.

Kolejnym narzędziem, którego można użyć, jest inotifywatch:

sudo inotifywatch -v -r /foo

Możesz dodać, -raby oglądać rekursywnie wszystkie podkatalogi. Jednak to rozwiązanie nie wykrywa zmian w nowo tworzonych plikach .

Kolejnym rozwiązaniem jest użycie inotifywait:

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

Oto kolejny przykład pokazania zawartości wszystkich nowo utworzonych test*plików w /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
kenorb
źródło