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.
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.
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
watch -n1 ls
inotifytools
pakiet wykorzystujeinotify
funkcję Linuksa, aby umożliwić oglądanie zdarzeń tworzenia plików w miarę ich występowania.Odpowiedzi:
możesz to zrobić za pomocą
watch
. To nie jest całkowicie w czasie rzeczywistym, ale wystarczająco blisko (do jednej dziesiątej sekundy):z instrukcji:
źródło
ls -lt
aby zobaczyć nowe pliki na górze listy lubls -ltr
zobaczyć nowe pliki na dole. Następnie, aby podświetlić te nowe pliki, użyj,watch -d
aby podświetlić zmiany w najnowszej aktualizacji lub,watch --differences=cumulative
aby wyróżnić wszystkie zmiany od momentuwatch
uruchomienia.watch tail ls
lubwatch head ls
pokaże najnowsze pliki z prawidłowymi opcjami zamawiania ls , takimi jak -lt z głową lub -ltr z ogonem .watch {options} 'ls {options} | tail {options}'
tail -f
następuje zmiany w pliku. Twoje pierwotne polecenie było takie, żewatch
nie działało to zbyt dobrze. Myślę, że tak będzie, jeśli uruchomione polecenie zostanie odpowiednio spreparowane. Czasami musisz użyćsh -c
do 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.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
sleep
czas w razie potrzeby. Użyłbym wartości co najmniej 2 sekund. Użyjcmd="ls"
dla struktury nierekurencyjnej lubcmd="find DIRNAME"
do wyszukiwania rekurencyjnego. Zauważ, że w ostatnim przypadku otrzymaszDIRNAME/
prefiks do wszystkich plików i katalogów.źródło
i
obniż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 LinuxTo takie proste, kiedy to wiem.
źródło
Możesz użyć
inotifytools
i jego narzędzi wiersza polecenia.Możesz użyć
inotify
do 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
:Możesz dodać,
-r
aby oglądać rekursywnie wszystkie podkatalogi. Jednak to rozwiązanie nie wykrywa zmian w nowo tworzonych plikach .Kolejnym rozwiązaniem jest użycie
inotifywait
:Oto kolejny przykład pokazania zawartości wszystkich nowo utworzonych
test*
plików w/tmp
:źródło