¿En qué circunstancias funciona gunzip y tar xf pero tar xzf falla?

9

Para ilustrar el punto: descargué la biblioteca LEDA del sitio web de la compañía . Usando tar -xzf en él falla:

$ 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

Sin embargo, gunzip seguido de tar -xf funciona bien:

$ 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

¿Alguien puede decirme por qué podría ser esto? Me gustaría que el tarcomando estándar funcione todo el tiempo.

Michael Schubert
fuente
Que sistema operativo IIRC hay Unixes con un tarque no implementa -z
Bananguin
@ user1129682 Desde el sitio de la compañía, parece que solo tiene opciones para Linux y Win ...
MattDMo
Si su alquitrán no admite z, use una tubería en su lugar: gunzip < archive.tar.gz | tar -xdebería funcionar en todas partes.
frostschutz
Si su copia de tarno soporta gunzip de descompresión, puede hacer lo siguiente en su lugar: gunzip -c $file | tar -x. Es común envolver eso en una función de shell.
1
Acabo de descargar ese archivo, y de hecho tar xzfda un error, en Debian GNU / Linux (que por supuesto usa gnutar). Impar.
derobert

Respuestas:

12

Lo que parece haber sucedido es que han comprimido dos veces el archivo.

Si ejecuta filesu archivo gunzip'd, encontrará que todavía es un archivo gzip. Y si le cambia el nombre para que tenga .gz nuevamente, puede volver a comprimirlo.

Parece que recientemente gnu tar agregará automáticamente la -zopción, siempre que la entrada sea un archivo. Entonces, es por eso que funciona sin la -zopción después de que ya lo haya ejecutado gunzipuna vez, tar lo agregó automáticamente.

Este comportamiento está documentado, desde la página de información:

"Leer el archivo comprimido es aún más simple: no necesita especificar ninguna opción adicional ya que GNU 'tar' reconoce su formato automáticamente. [...] El algoritmo de reconocimiento de formato se basa en" firmas ", una secuencia de bytes especial en el principio del archivo, que son específicos para ciertos formatos de compresión ".

Eso es de §8.1.1 "Creación y lectura de archivos comprimidos".

derobert
fuente
Muy bien visto! Confirmado con todas las combinaciones de gunzip y alquitrán.
Michael Schubert