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.


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.

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.