2013-09-05 19 views
16

Monitoruję nowe pliki utworzone w folderze w systemie Linux. Od czasu do czasu wydaje się w niej "ls -ltr". Ale żałuję, że nie istnieje program/skrypt, który automatycznie go wydrukuje i tylko najnowsze wpisy. Zrobiłem krótką pętlę, aby ją wypisać, ale powtórzyłoby to wpisy, które nie były nowe, a mój ekran byłby wyświetlany, gdy nie było nowych plików. Nauczyłem się „pod obserwacją”, który ma pokazać, co chcę i odświeża co N sekund, ale nie chcę się interfejs ncurses, szukam czegoś podobnego ogona:ogonopodobne ciągłe ls (lista plików)

  • ciągłego
  • pokazuje tylko nowe rzeczy
  • wydruki w moim terminalu, dzięki czemu można go uruchomić w tle i robić inne rzeczy i zobaczyć wyjście co teraz, a następnie miesza się z coraz cokolwiek robię: D

podsumowujący : pobierz dane wejściowe, porównaj z poprzednim wejściem, wypisz tylko to, co nowe. Coś, co to robi, nie brzmi jak dziwne narzędzie, widzę, że jest używane również w innych sytuacjach, więc spodziewałem się, że już istnieje, ale nie mogłem nic znaleźć. Propozycje?

+0

Co dystrybucja są uruchomione? –

+2

możliwy duplikat [Sposób ciągłego monitorowania katalogu za pomocą polecenia dnotify/inotify] (http://stackoverflow.com/questions/7566569/how-to-continuosly-monitor-the-directory-using-dnotify-inotify-command) – sehe

+0

Używam mięty pieprzowej. Patrzę na "inotify", nigdy o nim nie słyszałem, najwyraźniej nie robię tego, co chcę, tylko prawdopodobnie pomaga mi to zaprogramować scenariusz, żeby to zrobić. – msb

Odpowiedz

9

Jeśli masz dostęp do inotifywait (dostępny w pakiecie Inotify-tools jeśli jesteś na Debian/Ubuntu) można napisać skrypt tak:

#!/bin/bash 

WATCH=/tmp 

inotifywait -q -m -e create --format %f $WATCH | while read event 
do 
    ls -ltr $WATCH/$event 
done 

To jest jeden-liner, który wygrał” t daje te same informacje, które ls robi, ale to będzie wydrukować Nazwa pliku:

inotifywait -q -m -e create --format %w%f /some/directory 
+0

Dzięki, to zadziałało. Zrobiłem skrypt i otrzymuję $ WATCH jako parametr. Dzięki! – msb

+0

Podobnie jak dodatkowy komentarz, skrypt wyświetla wszystkie nowe pliki, ale rozmiar pliku wynosi zwykle zero, a to dlatego, że ls jest wykonywany po utworzeniu pliku, ale przed jego dodaniem. Dodałem usleep przed ls i teraz wszystko jest idealne. :-) Czy możesz (lub ja) dodać to do swojej odpowiedzi? – msb

+2

Czy zmiana '-e create' na' -e close_write' to naprawi? –

29

można użyć bardzo poręczny polecenie watch

watch -n 10 "ls -ltr" 

Otrzymasz ls co 10 sekund.

A jeśli dodasz tail -10, otrzymasz tylko 10 najnowszych.

watch -n 10 "ls -ltr|tail -10" 
+0

Pominie to pliki, w których twórca zmienia czasy plików na zera bardzo krótko po zakończeniu. –

+0

jak wspomniano w moim oryginalnym pytaniu, zegarek nie jest dokładnie tym, czego chcę, ponieważ będzie on powtarzał ostatnie pliki, jeśli nie ma wystarczającej ilości nowych plików, I ma interfejs ncurses. : -/ – msb

+0

Przepraszam - przegapiłem twoją wzmiankę o klątwach w moim podnieceniu, by odpowiedzieć. Często używam zegarka. – opentokix

0

Działa to w cygwin i Linux. Niektóre z poprzednich rozwiązań, które zapisują plik, spowodują thrash dysku.

Ten skrypt nie ma tego problemu:

SIG=1 
SIG0=SIG 
while [ $SIG != 0 ] ; do 
while [ $SIG = $SIG0 ] ; do 
    SIG=`ls -1 | md5sum | cut -c1-32` 
    sleep 10 
done 
SIG0=$SIG 
ls -lrt | tail -n 1 
done 
Powiązane problemy