tar cvf ou tar -cvf?

24

J'ai appris à utiliser tar sans '-' pour les options, tar cvfz dir.tar.gz Directory/mais j'ai récemment rencontré la tar -czvfsyntaxe légèrement différente (je pense que le 'f' doit être la dernière option dans ce cas).

Les deux fonctionnent sous Linux et Mac OS. Existe-t-il une syntaxe recommandée, avec ou sans '-' qui est plus portable entre les saveurs Unix?

ascobol
la source
La raison pour laquelle -fdoit être la dernière option est qu'elle prend un argument et que cet argument peut être donné en touchant l'option. tar -cvfz dir.tar.gz Directorysignifie créer une archive nommée zcontenant les fichiers dir.tar.gzet Directory.
JoL

Réponses:

27

tarest l'une de ces anciennes commandes du temps où la syntaxe des options n'avait pas été normalisée. Étant donné que toutes les invocations utiles de tarnécessitent de spécifier une opération avant de fournir un nom de fichier, la plupart des tarimplémentations interprètent leur premier argument comme une option même s'il ne commence pas par un -. La plupart des implémentations actuelles acceptent un -; la seule exception que je connaisse est Minix .

Les anciennes versions de POSIX et Single Unix incluaient une tarcommande sans no -avant le spécificateur d'opération. Single Unix v2 avait les deux archiveurs traditionnels cpioet tar, mais très peu de drapeaux pouvaient être standardisés car les implémentations existantes étaient trop différentes, donc les normes ont introduit une nouvelle commande pax, qui est le seul archiveur standard depuis Single Unix v3 . Si vous voulez une conformité standard, utilisez pax, mais sachez que de nombreuses distributions Linux ne l'incluent pas dans leur installation de base, et il n'y paxen a pas dans Minix . Si vous voulez la portabilité dans la pratique, utilisez tar cf filename.tar.

Gilles 'SO- arrête d'être méchant'
la source
1
Notez également que si une distribution Linux contient pax, elle est généralement livrée avec la pire implémentation connue de pax (GNU pax) qui devrait être évitée en raison de nombreux bogues.
schily
De plus, la pscommande a le même comportement, vous pouvez omettre -les options.
perror
1
@perror C'est faux. De nombreuses versions de psne vous permettent pas d'omettre le -. La version Linux a des options avec et sans -, mais la plupart ont des significations différentes (compatibilité BSD vs System V).
Gilles 'SO- arrête d'être méchant'
1
C'est vrai que, la plupart du temps, je n'utilise que ps aux... Alors, je peux (en partie) me tromper. Désolé.
perror
13

Je suis peut-être un dinosaure, mais je pense que l'utilisation habituelle de "cvf" au lieu de "-cvf" est probablement plus portable. J'imagine que la plupart des distributions Linux utilisent GNU tar, et je suppose que les * BSD font aussi, mais vous trouverez Unixes propriétaires qui utilisent encore l'ancien goudron de SysV, qui a utilisé pour exiger que vous de ne pas utiliser un « - » dans les options .

Je n'utilise pas "-cvf" (ou "-xf" ou quoi que ce soit) et je n'ai aucun problème même avec le dernier cri Arch linux.

Et juste comme note latérale, je pense que vous pouvez également utiliser les options de commande "jar" standard de Sun avec ou sans '-'.

Bruce Ediger
la source
Je suis d'accord avec votre réponse, même si la page d'informations de tar (qui est très claire sur les trois styles de spécification des options) indique que les anciennes options ne sont conservées que pour des raisons de compatibilité et qu'il existe un tas d'options qui n'ont AUCUNE ancienne correspondance.
David Costa
1
Vous vous trompez: tar sur AT&T UNIX a été écrit pour ne pas avoir de - mais il accepte le - et le saute. La seule façon portable d'appeler tar est de l'appeler sans - et si jamais vous trouvez une implémentation "tar" qui n'accepte pas les choses sans -, ce n'est pas tar.
schily
3

Il y a eu peu de programmes sous UNIX qui ne suivent pas la norme d'option actuelle.

La première est dd, mais dd a été dérivé du programme IBM mainframe DDR(vidage et restauration de disque).

L'un est aret l'autre l'est tar. D'après mes informations, tar voulait être similaire à ar.

Toutes les implémentations tar fonctionnent sans le - et aucune implémentation utile ne nécessite le -. Donc, si vous aimez écrire des scripts portables, vérifiez la norme SUSv2 et utilisez uniquement une ligne de commande compatible avec SUSv2.

schily
la source