Plik jest kolejno pobierany przez wget
.
Jeśli zacznę go rozpakowywać cat myfile.tar.bz2 | tar -xj
, może rozpakować się poprawnie lub nie powieść z „Nieoczekiwanym EOF”, w zależności od tego, co jest szybsze.
Jak „cat and follow” pliku, tj. Wyprowadzać zawartość pliku na standardowe wyjście, ale nie wychodzić z EOF, zamiast tego nadal subskrybować ten plik i kontynuować wysyłanie nowych części danych, wychodząc tylko wtedy, gdy plik jest zamknięty przez program zapisujący i nie zostanie ponownie otwarty w ciągu N sekund.
I utworzeniu skryptu cat_and_follow oparciu @ arielCo za odpowiedź , która również kończy tail
, gdy plik nie jest otwarty do pisania więcej.
tail
polecenia z opcją Follow.tail
działa również z plikami binarnymi?less +F
...wget ... && tar xjvf ...
Odpowiedzi:
Testowałem go na Ubuntu z tarballem źródłowym LibreOffice podczas
wget
pobierania:Działa również na Solarisie 10, RHEL3, AIX 5 i Busybox 1.22.1 w moim telefonie z Androidem (używać
tail +1 -f file
z Busybox).źródło
/proc/*/fd/
okresowo skanować i sprawdzać, czy plik jest na dobre zamknięty.tail
zadziała z plikami binray ...-f
opcja jest standardowa. Jednak nie zakończy się automatycznie po zakończeniu pobierania.tail +1f
nie działa. Musisz to zrobićtail -n +1
Problem polega na tym, że
cat
nie wie się, że plik jest nadal dołączany. Gdy tylkocat
napotka (bieżący) koniec pliku, wychodzi.Musisz
wget
napisać do potoku (lub FIFO), aby tego uniknąć.źródło
curl
, który domyślnie wyświetla wyjście na standardowe wyjście. I (1)-f -
jest redundantne,tar
domyślnie odczytuje ze standardowego wejścia, a (2) większośćtar
s może automatycznie wykryć kompresję, więcj
często jest to niepotrzebne.curl http://... | tar x
tee
tak:curl http://… | tee ….tbz | tar -xj
, ale wznawianie pobierania pobiera bardziej skomplikowane niż tylko ponownie powołując się na tę samą komendę.Aby przeczytać i śledzić plik od początku do momentu przerwania:
Aby to wykazać, spróbuj tego (zakładając, że Bash z GNU Coreutils):
(Uwaga:
+1f
wspomniane przez innych jest interpretowane jako nazwa pliku, przynajmniej wtail
poleceniu GNU ).Powyższe działa dla pojedynczego pliku. Łączenie wielu plików nie byłoby w stanie śledzić wszystkich z nich deterministycznie, bez zawieszenia się na pierwszym. Aby „ cat and follow ”, po ostatnim pliku, można użyć podstawienia procesu . Oto kolejna demonstracja:
źródło
tail +1f file
nie.tail +1f
połączeniu z innymi opcjami, takimi jak--pid