web-dev-qa-db-fra.com

Pourquoi `tar -xvfz` échoue, mais` tar xvfz` fonctionne?

tar -xvfz foo.tar.gz renvoie une erreur tar: z: Cannot open: No such file or directory

Ceci est parfaitement compréhensible - le commutateur f attend un nom de fichier et doit donc être le dernier.

Cependant, en omettant le tiret tar xvfz foot.tar.gz fonctionne, décompresse et décompresse le fichier.

J'ai testé cela sur OS X 10.8 et Ubuntu 12.04.

Des idées pourquoi?

[modifié pour ajouter]

J'utilise toujours tar -zxvf foo.tar.gz. Cependant, cette question s'est posée à cause de ce xkcd , et ma surprise quand quelqu'un a insisté pour que tar xvfz travaillerait.

enter image description here

41
anu

tar a 3 types de syntaxe (selon this ):

  • options longues (--file)
  • options courtes (-f)
  • anciennes options (f)

Pour l'ancienne syntaxe des options, toutes les lettres doivent suivre "tar" et doivent toutes tomber dans un seul bloc sans espaces. L'ordre des lettres n'a pas vraiment d'importance, tant que les arguments de ces lettres suivent le même ordre après le groupe d'options.

Cette ancienne façon d'écrire les options tar peut surprendre même les utilisateurs expérimentés. Par exemple, les deux commandes:

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

sont assez différents. Le premier exemple utilise ‘archive.tar.gz’ comme valeur pour l’option ‘f’ et reconnaît l’option ‘z’. Le deuxième exemple, cependant, utilise "z" comme valeur pour l'option "f" - probablement pas ce qui était prévu.

Les anciennes options sont conservées pour la compatibilité avec les anciennes versions de tar.

La commande avec un "-" équivaut à

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

C'est la raison pour laquelle votre exemple fonctionne sans "-" et non avec "-"

61
Napster_X