Sob que circunstâncias o gunzip e o tar xf funcionam, mas o tar xzf falha?

9

Para ilustrar o ponto: baixei a biblioteca LEDA do site da empresa . O uso do tar -xzf nele falha:

$ 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

No entanto, gunzip seguido por tar -xf funciona perfeitamente:

$ 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

Alguém pode me dizer por que isso poderia ser? - Eu gostaria que o tarcomando padrão funcionasse o tempo todo.

Michael Schubert
fonte
Qual sistema operacional? IIRC há Unixes com um tarque não implementa -z
Bananguin
@ user1129682 A partir do site da empresa, parece que ele só tem opções para Linux e Win ...
MattDMo
Se o seu tar não suportar z, use um pipe: gunzip < archive.tar.gz | tar -xdeve funcionar em qualquer lugar.
Frostschutz
Se a sua cópia do tarnão suporta gunzip descompressão, você pode fazer o seguinte em vez disso: gunzip -c $file | tar -x. É comum agrupar isso em uma função shell.
1
Acabei de baixar esse arquivo e, de fato, tar xzfdá um erro, no Debian GNU / Linux (que obviamente usa gnutar). Ímpar.
derobert

Respostas:

12

O que parece ter acontecido é que eles compactaram duas vezes o arquivo.

Se você rodar fileem seu arquivo zipado, você ainda encontrará um arquivo gzip. E se você renomeá-lo para ter .gz novamente, poderá alterá-lo novamente.

Parece que recentemente o gnu tar adicionará automaticamente a -zopção, desde que a entrada seja um arquivo. Então, é por isso que funciona sem a -zopção depois que você já executou gunzipuma vez, o tar a adicionou automaticamente.

Esse comportamento está documentado, na página de informações:

"Ler o arquivo compactado é ainda mais simples: você não precisa especificar nenhuma opção adicional, pois o GNU` tar 'reconhece seu formato automaticamente. [...] O algoritmo de reconhecimento de formato é baseado em "assinaturas", uma sequência especial de bytes no diretório início do arquivo, específico para determinados formatos de compactação ".

Isso é do §8.1.1 "Criando e lendo arquivos compactados".

derobert
fonte
Muito bem visto! Confirmado com todas as combinações de gunzip e alcatrão.
Michael Schubert