При каких обстоятельствах работает gunzip & tar xf, но tar xzf не работает?

9

Чтобы проиллюстрировать это: я скачал библиотеку LEDA с веб-сайта компании . Использование tar -xzf не помогает:

$ 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

Тем не менее, gunzip и tar -xf работают нормально:

$ 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

Может кто-нибудь сказать мне, почему это может быть? - Я бы хотел, чтобы стандартная tarкоманда работала все время.

Михаэль Шуберт
источник
Какая операционная система? IIRC есть Unixes с tar, который не реализует -z
Bananguin
@ user1129682 С сайта компании, похоже, есть только опции для Linux и Win ...
MattDMo
Если ваш tar не поддерживает z, используйте вместо этого канал: он gunzip < archive.tar.gz | tar -xдолжен работать везде.
frostschutz
Если ваша копия tarне поддерживает Gunzip декомпрессии, вы можете сделать следующее вместо: gunzip -c $file | tar -x. Это распространено в функции оболочки.
1
Я только что загрузил этот архив и действительно tar xzfвыдает ошибку в Debian GNU / Linux (которая, конечно, использует gnutar). Странный.
Дероберт

Ответы:

12

Похоже, произошло то, что они дважды сжали архив.

Если вы запустите fileсвой файл gunzip, вы все равно найдете его в архиве gzip. И если вы снова переименуете его в .gz, вы можете снова заархивировать его.

Похоже, что недавно GNU tar автоматически добавит эту -zопцию, при условии, что ввод - это файл. Вот почему он работает без -zопции, после того как вы уже запустили gunzipодин раз, tar автоматически добавил ее.

Это поведение задокументировано со страницы информации:

«Чтение сжатого архива еще проще: вам не нужно указывать никаких дополнительных опций, поскольку GNU tar распознает его формат автоматически. [...] Алгоритм распознавания формата основан на« сигнатурах », специальной последовательности байтов в начало файла, специфичное для определенных форматов сжатия. "

Это из §8.1.1 «Создание и чтение сжатых архивов».

derobert
источник
Очень хорошо заметили! Подтверждено всеми комбинациями gunzip и tar.
Михаэль Шуберт