Dlaczego tar nie może wyodrębnić plików .zip? [Zamknięte]


28

Próbowałem użyć większości formatów (gzip itp.), Aby wyodrębnić plik zip tar, a kiedy byłem na tyle sfrustrowany Google, nie znalazłem sposobu, aby wyodrębnić plik zip tari tylko zalecenia użycia ziplub unzip. W rzeczywistości mój system Linux nie ma nawet zipnarzędzia, ale tylko unzip(pozostawiając mi zastanawianie się, dlaczego jest to główna zalecana opcja). Oczywiście unzipzadziałało, rozwiązując mój problem, ale dlaczego nie można tarwyodrębnić plików zip? Być może powinienem zamiast tego zapytać, jaka jest różnica między zipem a obsługiwanymi metodami kompresji tar?


1
Tylko uwaga, bsdtarmożna wyodrębnić .ziparchiwa: P
HalosGhost

12
Masz na myśli: „dlaczego nie mogę użyć otwieracza do puszek do siekania marchwi?” Chodzi o to, że tar ma swój własny format pliku, a następnie kompresuje go dowolną wybraną metodą. zip to zupełnie inna bestia. Proste. Jest to „sposób uniksowy”, ma jedno małe narzędzie, które dobrze wykonuje jedną pracę, zamiast składać jaja, składające wełnę lochy mleczne, które zaspokoją wszystkie Twoje potrzeby.
zadzwonić

Lekko zredagowałem moje pytanie, aby to wyjaśnić, ale myślę, że moje pytanie wyraźnie sugerowało, że myślałem, że zip jest formatem kompresji, a nie narzędziem zastępującym kompresję tar +. Wybrana przeze mnie odpowiedź poprawiła moje założenia i pokazała, że ​​odpowiedź nie była oparta na opiniach.
Pluto,

Nie masz zipdomyślnie, ponieważ licencjonowanie nie jest zgodne z GPL
venimus

Odpowiedzi:


29

Filozofią UNIX jest posiadanie małych narzędzi. Jedno narzędzie robi dokładnie jedną rzecz, ale to szczególnie dobrze.

tarNarzędzie jest właśnie łączenie kilku plików w jednym pliku bez kompresji.

gzipNarzędzie jest właśnie sprężanie pojedynczy plik.

Jeśli chcesz mieć oba, po prostu połącz oba narzędzia, tworząc .tar.gzplik.


zipNarzędzie to zupełnie inna sprawa. Pobiera kilka plików i łączy je w jeden skompresowany plik. Z zupełnie innymi algorytmami.


Jeśli chcesz, aby rządziły nimi wszystkie narzędzia, użyj wszystkich atool. Będzie obsługiwał całą masę różnych formatów po prostu przez wykrycie formatu i wywołanie odpowiedniego narzędzia.


Dziękuję za wyjaśnienie celu obu zamiast po prostu wyjaśnienia, co robi smoła. Wkrótce doszedłem do odpowiedzi po przejrzeniu artykułu na Wikipedii, który wymienia formaty „Archiwizacja”, „Kompresja” i oba w trzech różnych tabelach. Pomyślałem, że poczekam na odpowiedź, która to jasno wyjaśni.
Pluton

Aby być nieco wybrednym, gzipalgorytm kompresji jest taki sam, jak używany przez zip. Różnica polega na tym, że gzipma na celu kompresowanie dowolnego strumienia bajtów, w tym .tarpliku, podczas gdy zip, wyprowadzony i zainspirowany przez PKZIP, kompresuje i archiwizuje w jednym kroku (iw tej kolejności).
Joe Sewell,

9

Krótko mówiąc: narzędzie tar GNU nie przepływa przez zip / rozpakuj, ponieważ nikogo to nie obchodzi.

Długa historia, oryginalny rozmiar:

tarpoczątkowo nie był przeznaczony do rozpakowywania i kompresowania plików, ale do archiwizowania kilku plików w jednym dużym pliku. Ponieważ ludzie nie tylko chcieli zarchiwizować swoje pliki, ale także je skompresować, więc po prostu tarprzesyłają dane wyjściowe przez dowolny kompresor, który akceptuje wejście strumienia danych i upuszcza wyniki do pliku. Zysk!

Teraz, aby takie zadanie było jak najbardziej bezbolesne, tarpostanowiłem wewnętrznie potokować pliki generowane do narzędzi do kompresji, takich jak gzip, lzma itp., Które były uruchamiane przez specjalne flagi dla każdego formatu podczas działania tar. Dlatego, gdy próbujesz wyodrębnić uszkodzony plik tar, wyświetla się podstawowy błąd narzędzia zamiast tar:

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

Tak więc nie jest to, że tarnie rozpakowuje plików zip, tylko tarnie ma możliwości przepuszczenia go przez właściwe narzędzie, ponieważ nikt tak naprawdę nie zadał sobie trudu, aby go zaimplementować, a zip już spełnia funkcję archiwizacji plików pliku tar format ma mniejszy powód, aby tar go obsługiwał.

Teraz istnieją narzędzia typu „wszystko w jednym”, które kompresują / dekompresują wszystko, co na nich rzucisz, ponownie, musisz mieć odpowiednie narzędzia, aby w pełni je obsługiwać. Jeśli ich nie masz, narzędzie zawiedzie.


1
Cóż, poza tym, że nikt nie implementuje odpowiedniego narzędzia do przepuszczania strumieniowego, nie ma jednego: pliki tar łączą tylko wiele plików w jeden. Kompresja jest osobna. Więc filtruje potoki tar poprzez kompresję / dekompresję pojedynczego pliku tar. Zip działa inaczej; używa jednego zintegrowanego narzędzia do kompresji i łączenia (podobny jest program uniksowy afio).
derobert

Proponuję wspomnieć o kilku istniejących narzędziach do kompresji. Np. Istnieje GNOME file-roller...
derobert

Rolka plików @derobert obsługuje zip tylko wtedy, gdy masz rozpakowane / zip / p7zip. W przeciwnym razie jest tak samo bezużyteczny jak smoła.
Braiam

tar obsługuje różne wersje skompresowane tylko wtedy, gdy masz zainstalowane odpowiednie narzędzie ... Wieloformatowe menedżery archiwów są przydatne, ponieważ zapewniają spójny interfejs do obsługi różnych formatów archiwów.
derobert

@derobert dokładnie.
Braiam

3

tarPlik jest formatem pliku w sobie zaprojektowany dla archiwów taśmowych. Ten format można następnie skompresować przy użyciu (na przykład) gziplub bzip2formatów kompresji. Po wyodrębnieniu skompresowanego pliku tar skutecznie go rozpakuj, a następnie wyodrębnij oryginalne pliki z nieskompresowanego tarpliku.

Po rozpakowaniu zippliku nie ma tarw nim żadnego pliku, tylko wszystkie oryginalne pliki. Dlatego nie ma powodu, taraby w ogóle brać udział w tym procesie.

Możesz także kompresować pliki za pomocą gziplub bzip2samodzielnie, tak jak możesz tworzyć zippliki (bez tarudziału). Po rozpakowaniu tych plików używasz gunziplub bunzip2nie tar.


1

Ponieważ odpowiedź „Niektóre rzeczy po prostu są i powinniśmy je zaakceptować” również nie pasuje do mnie, po prostu trochę kopałam (zawsze dobrze jest nauczyć się czegoś nowego, prawda?).

Wygląda więc na to, że problem polega na tym, dokąd poszły narzędzia i jaki był ich cel.

Zamiast sparafrazować to, co znalazłem i sprawić, że wody będą niepotrzebnie mętne (zaciemnianie mnie wkurza), spójrz na ten artykuł: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

Przypuszczam, że tar mógł mieć wbudowaną obsługę zip, ale metodologie są zasadniczo różne. A może zastanawiali się, dlaczego ktoś miałby używać tego narzędzia do archiwizacji do zarządzania plikami z innego narzędzia do archiwizacji i kompresji (lub może istniał jakiś argument między dwoma oryginalnymi programami kodującymi i złożono polecenie ograniczenia dostępu, które uniemożliwiało zamkowi przekraczanie granicy aplikacji ... tak, żartuję).

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.