W jakich okolicznościach działa gunzip i tar xf, ale nie działa tar xzf?

9

Aby zilustrować tę kwestię: pobrałem bibliotekę LEDA ze strony internetowej firmy . Użycie tar -xzf na nim nie powiedzie się:

$ tar -xzf LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar.gz 
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Jednak gunzip, po którym następuje tar -xf, działa dobrze:

$ gunzip LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar.gz
$ tar -xf LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar
# no error

Czy ktoś może mi powiedzieć, dlaczego tak jest? - Chciałbym, aby standardowe tarpolecenie działało cały czas.

Michael Schubert
źródło
Jaki system operacyjny IIRC istnieją Unixy z systemem tar, który nie implementuje -z
Bananguin 15.04.13
@ user1129682 Ze strony firmy wygląda na to, że ma tylko opcje dla Linuksa i Win ...
MattDMo 15.04.2013
Jeśli twoja tar nie obsługuje z, użyj zamiast tego potoku: gunzip < archive.tar.gz | tar -xpowinien działać wszędzie.
frostschutz
Jeśli kopia tarnie obsługuje gunzip dekompresji, można wykonać następujące zamiast: gunzip -c $file | tar -x. Często jest to zawijane w funkcję powłoki.
1
Właśnie tar xzfpobrałem to archiwum i rzeczywiście wyświetla błąd na Debian GNU / Linux (który oczywiście używa gnutara). Dziwny.
derobert

Odpowiedzi:

12

Wydaje się, że tak się stało, że dwukrotnie skompresowali archiwum.

Jeśli uruchomisz fileplik Gunzip, znajdziesz jego archiwum gzip. A jeśli zmienisz jego nazwę na .gz, możesz go ponownie wystrzelić.

Wydaje się, że ostatnio gnu tar automatycznie doda tę -zopcję, pod warunkiem, że dane wejściowe to plik. Dlatego działa bez -zopcji, gdy już gunzipraz uruchomiłeś , tar automatycznie to dodał.

To zachowanie jest udokumentowane na stronie informacyjnej:

„Czytanie skompresowanego archiwum jest jeszcze prostsze: nie musisz określać żadnych dodatkowych opcji, ponieważ GNU„ tar ”automatycznie rozpoznaje jego format. [...] Algorytm rozpoznawania formatu opiera się na„ podpisach ”, specjalnych sekwencjach bajtów w początek pliku, który jest specyficzny dla niektórych formatów kompresji. ”

To pochodzi z § 8.1.1 „Tworzenie i czytanie skompresowanych archiwów”.

derobert
źródło
Bardzo dobrze zauważony! Potwierdzony wszystkimi kombinacjami gunzip i smoły.
Michael Schubert,