¿Por qué falla `tar -xvfz`, pero funciona` tar xvfz`?

41

tar -xvfz foo.tar.gz devuelve un error tar: z: Cannot open: No such file or directory

Esto es completamente comprensible: el fconmutador espera un nombre de archivo, por lo que debe ser el último.

Sin embargo, omitir el guión tar xvfz foot.tar.gzfunciona y descomprime y descomprime el archivo.

He probado esto en OS X 10.8 y Ubuntu 12.04.

Alguna idea de por qué?

[editado para agregar]

Yo siempre uso tar -zxvf foo.tar.gz. Sin embargo, esta pregunta ha surgido debido a este xkcd , y mi sorpresa cuando alguien insistió en que tar xvfzfuncionaría.

ingrese la descripción de la imagen aquí

anu
fuente
12
Lo siento: xkcd.com/1168
MichaelHouse

Respuestas:

61

tar tiene 3 tipos de sintaxis (de acuerdo con esto ):

  • opciones largas (--file)
  • opciones cortas (-f)
  • opciones anteriores (f)

Para la sintaxis de la opción anterior, todas las letras deben seguir "tar" y deben caer en un solo grupo sin espacios. El orden de las letras realmente no importa, siempre y cuando los argumentos de esas letras sigan el mismo orden después del conjunto de opciones.

Esta antigua forma de escribir opciones de alquitrán puede sorprender incluso a los usuarios experimentados. Por ejemplo, los dos comandos:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

son bastante diferentes El primer ejemplo usa 'archive.tar.gz' como valor para la opción 'f' y reconoce la opción 'z'. Sin embargo, el segundo ejemplo usa 'z' como el valor para la opción 'f', probablemente no lo que se pretendía.

Las opciones antiguas se mantienen para compatibilidad con versiones antiguas de tar.

El comando con un '-' es equivalente a

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

Esa es la razón por la que su ejemplo funciona sin un "-" y no con "-"

GeekRide
fuente
3
wtf unix
BlueRaja 02 de