Por que o 'tar -xvfz' falha, mas o 'tar xvfz' funciona?

38

tar -xvfz foo.tar.gz retorna um erro tar: z: Cannot open: No such file or directory

Isso é totalmente compreensível - a opção f espera um nome de arquivo e, portanto, precisa ser a última.

No entanto, omitir o hífen tar xvfz foot.tar.gz funciona e descompacta e desmarca o arquivo.

Eu testei isso no OS X 10.8 e no Ubuntu 12.04.

Alguma ideia do porquê?

[editado para adicionar]

Eu sempre uso tar -zxvf foo.tar.gz . No entanto, esta questão surgiu por causa de este xkcd , e minha surpresa quando alguém insistiu que tar xvfz iria funcionar.

    
por anu 01.02.2013 / 15:44

1 resposta

60

o tar tem 3 tipos de sintaxe (de acordo com this ):

  • opções longas (--file)
  • opções curtas (-f)
  • opções antigas (f)

Para a sintaxe da opção antiga, todas as letras devem seguir "tar" e todas devem se encaixar em uma única clump sem espaços. A ordem das letras realmente não importa, desde que os argumentos para essas letras sigam a mesma ordem após o grupo de opções.

Essa antiga maneira de escrever opções de tars pode surpreender até mesmo usuários experientes. Por exemplo, os dois comandos:

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

são bem diferentes. O primeiro exemplo usa ‘archive.tar.gz’ como o valor da opção ‘f’ e reconhece a opção ‘z’. O segundo exemplo, no entanto, usa "z" como o valor da opção "f" - provavelmente não o que se pretendia.

Opções antigas são mantidas para compatibilidade com versões antigas do tar.

O comando com um '-' é equivalente a

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

Esse é o motivo pelo qual seu exemplo está funcionando sem um "-" e não com "-"

    
por 01.02.2013 / 16:03