42 votes

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

tar -xvfz foo.tar.gz retourne une erreur tar: z: Ne peut pas ouvrir: Aucun fichier ou dossier de ce type

Cela est tout à fait compréhensible - l'interrupteur f attend un nom de fichier, et donc doit être en dernier.

Cependant, en omettant le trait d'union tar xvfz foot.tar.gz fonctionne et décompresse et untare le fichier.

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

Des idées pourquoi?

[édité pour ajouter]

Je utilise toujours tar -zxvf foo.tar.gz. Cependant, cette question est apparue à cause de ce xkcd, et ma surprise quand quelqu'un a insisté que tar xvfz fonctionnerait.

entrer la description de l'image ici

62voto

Marty Points 3332

Tar a 3 types de syntaxe (selon ce lien) :

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

Pour la syntaxe des anciennes options, toutes les lettres doivent suivre "tar" et doivent toutes être regroupées 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 bloc d'options.

Cette ancienne manière 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érentes. 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 assurer la compatibilité avec les anciennes versions de tar.

La commande avec un '-' est équivalente à

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 "-"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X