Pourquoi la séquence spécifique d'options est-elle importante pour la command tar?

J'essayais la command tar pour faire des archives avec l'extension .tar .

s'il vous plaît jeter un oeil à la série de commands suivantes, j'ai essayé:

 $ ls abc.jpg hello.jpg xjf.jpg $ tar -cfv test.tar *.jpg tar: test.tar: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors $ ls abc.jpg hello.jpg v xjf.jpg $ rm v $ ls abc.jpg hello.jpg xjf.jpg $ tar -cvf test.tar *.jpg abc.jpg hello.jpg xjf.jpg $ ls abc.jpg hello.jpg test.tar xjf.jpg 

pourquoi il donne une réponse différente avec différentes séquences d'options? à savoir -cfv vs cvf .
d'après ce que j'ai appris dans le script bash, cette séquence d'options n'a pas d'importance.

Comme l'a dit @jcbermu, pour la plupart des programmes et dans la plupart des cas, l'ordre des drapeaux de command line n'est pas important. Cependant, certains drapeaux attendent une valeur. Plus précisément, le drapeau -f de tar est:

  -f, --file ARCHIVE use archive file or device ARCHIVE 

Donc, tar attend -f d'avoir une valeur et cette valeur sera le nom du file tar qu'il crée. Par exemple, pour append tous les files .jpg à une archive appelée foo.tar , vous exécuterez

 tar -f foo.tar *jpg 

Ce que tu courais était

 tar -cfv test.tar *.jpg 

tar comprend que "créer ( -c ) une archive appelée v ( -fv ), contenant les files test.tar et toute fin en .jpg .

Lorsque vous exécutez tar -cvf test.tar *.jpg d'autre part, il prend test.tar comme nom de l'archive et *jpg comme list de files.

La command n'a pas d'importance tant que l'option n'a pas besoin d'une valeur. Dans votre cas, -f doit spécifier un nom de file.

Dans le premier cas ( tar -cfv ), la command considère que les noms de files de sortie sont v car c'est après -f .

Alors que d'autres ont fait remarquer que cela le traitait comme -c -fv , je pense que je devrais noter que cela n'est fait que parce que le tiret a été utilisé, et ce comportement ne s'applique pas à toutes les versions de goudron. En mode legacy (pas de tiret), tar traite le premier argument spécialement, et un "f" ou "b" à l'intérieur consumra les mots pleins suivants après les options ( tar cbf 20 file.tar ou tar cbf 20 file.tar ). Pour GNU tar, vous pouvez find plus de détails dans la documentation complète de Texinfo en exécutant des info tar styles .

En général, vous ne devez pas countr sur l'un ou l'autre comportement, et spécifiez toujours f comme dernière option et placez un espace entre celui-ci et le nom de file. ( -b n'est important que dans certaines situations lors de l'écriture sur des lecteurs de bandes physiques, de sorte qu'il peut être ignoré pour cette discussion).