tail: czytanie całego pliku, a następnie śledzenie


35

Chciałbym pewnego tail -frodzaju zachowanie, które odczytuje cały plik, a następnie kontynuuje śledzenie tego, jak jest napisane.


ROZWIĄZANIE

W oparciu o odpowiedź, którą zaakceptowałem, działa to: tail -f -n +1 {filename}

Dlaczego to działa:-f opcja nadal „follow” plik i wyjściowe nowe linie są one zapisywane w pliku. W -n +1przesyła zlecenie tailrozpocząć czytanie pliku z pierwszej linii. Korzystanie -n -10rozpoczynałoby się od ostatnich dziesięciu wierszy pliku.


2
To jest komentarz, a nie pytanie. I czy ogon już tego nie robi: tail -f -n 10000000000000000000prawdopodobnie pokaże wszystkie linie, prawda? (może 10000000000000000000 to trochę dużo: =))
Rinzwind

Wierzę, more fileNameże zrobiłbym tak
ryekayo,

1
no..more nie doda dodatkowych linii dodanych do pliku po uruchomieniu więcej.
Rinzwind,

Prawdopodobnie tail -f -n 100...będzie wymagał wstępnego odczytu pliku w celu ustalenia liczby linii, chyba że jest wystarczająco inteligentny, aby obliczyć górną granicę liczby wierszy na podstawie rozmiaru pliku.
mwfearnley

Odpowiedzi:


51

Posługiwać się

tail -f -n +1

Użycie man taildaje więcej szczegółów, poniżej podano odpowiedni fragment.

<snip>Numbers having a leading plus (`+') sign are relative to the
beginning of the input, for example, ``-n +2'' starts the display at the
second line of the input.</snip>

-f      The -f option causes tail to not stop when end of file is
        reached, but rather to wait for additional data to be appended to
        the input.  The -f option is ignored if the standard input is a
        pipe, but not if it is a FIFO.

-n number
        The location is number lines.

3
Czy możesz dodać te „więcej szczegółów” do swojej odpowiedzi? Wyjaśnij, dlaczego i jak działa twoje rozwiązanie. (Znalazłem odpowiedź w kolejce postów niskiej jakości.)
kraxor

1
@kraxor „Więcej szczegółów” można znaleźć, wykonując man tail(i czytając), jak mówi odpowiedź, lub wyszukaj online „stronę ogona” i przeczytaj jedną z nich. taildziała, zaczynając od pozycji w pliku, odczytuje (i wyświetla) do końca, a następnie monitoruje wzrost rozmiaru pliku. Gdy rozmiar pliku wzrasta, tailodczytuje i wyświetla od poprzedniej pozycji EOF do nowego końca pliku.
waltinator,

2
@waltinator Tak naprawdę nie prosiłem o siebie. Poprosiłem go, aby dodał więcej szczegółów, ponieważ jego post został oznaczony jako niskiej jakości, ale nie chciałem głosować za usunięciem, ponieważ udzielił poprawnej odpowiedzi.
kraxor

1
Właśnie tego szukałem. Użyłem tail -50 {filename}wcześniej, ale nie udało mi się połączyć tych dwóch.
Sonny,


3

Spróbuj tego:

watch tail {filename}

gdzie {filename}jest plik, który chcesz mieć na oku. Spowoduje to ciągłe monitorowanie polecenia pod kątem zmian i wysyłanie zmian do standardowego wyjścia. To całkiem przydatne.


To wygląda na bardzo miłe narzędzie. Chociaż nie do końca dało to wyniki, których szukałem, na pewno będę o tym pamiętać. Łączenie go z zaakceptowaną odpowiedzią jest całkiem miłe:watch tail -n +1 {filename}
Sonny,

Tak, wygląda na to, że go udoskonaliłeś!
Rick Chatham

watchjest naprawdę użytecznym narzędziem, ale do oglądania zmieniającego się wyniku polecenia, ale do oglądania końca dołączanego pliku jest o wiele lepiej użyć tail -f. --- watch tail {filename}ponownie otworzy i ponownie przeczyta koniec pliku co dwie sekundy. Z drugiej strony tail -fobserwuje wzrost pliku i po wykryciu natychmiast odczytuje tylko dołączoną część. tailf -fjest znacznie bardziej wydajny, a reakcja jest znacznie szybsza. Ponadto będzie stale wyświetlać zawartość pliku od momentu rozpoczęcia. --- watchnadpisuje dane wyjściowe co dwie sekundy.
pabouk
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.