tar cvf ou tar -cvf?


24

Eu aprendi a usar tar sem '-' para opções, como, tar cvfz dir.tar.gz Directory/recentemente, encontrei a tar -czvfsintaxe um pouco diferente (acho que o 'f' deve ser a última opção nesse caso).

Ambos funcionam no Linux e no Mac OS. Existe uma sintaxe recomendada, com ou sem '-', que é mais portátil entre os sabores unix?



A razão pela qual -fdeve ser a última opção é porque ela requer um argumento e esse argumento pode ser dado tocando na opção. tar -cvfz dir.tar.gz Directorysignifica criar um arquivo nomeado zque contém os arquivos dir.tar.gze Directory.
— 31418 JoL

Respostas:


27

taré um daqueles comandos antigos dos dias em que a sintaxe da opção não havia sido padronizada. Como todas as chamadas úteis tarexigem a especificação de uma operação antes de fornecer qualquer nome de arquivo, a maioria das tarimplementações interpreta seu primeiro argumento como uma opção, mesmo que não comece com a -. As implementações mais atuais aceitam a -; a única exceção que conheço é o Minix .

As versões mais antigas do POSIX e Single Unix incluíam um tarcomando sem -antes do especificador de operação. O Single Unix v2 tinha arquivadores tradicionais cpioe tar, mas pouquíssimos sinalizadores puderam ser padronizados porque as implementações existentes eram muito diferentes; portanto, os padrões introduziram um novo comando pax, que é o único arquivador padrão desde o Single Unix v3 . Se você deseja conformidade padrão, use pax, mas tenha cuidado, pois muitas distribuições Linux não a incluem na instalação base e não há paxno Minix . Se você deseja portabilidade na prática, use tar cf filename.tar.



1
Observe também que, se uma distribuição Linux contém pax, ela geralmente vem com a implementação pax mais conhecida (pax GNU) que deve ser evitada devido a muitos bugs.
— schily 9/09/15

Além disso, o pscomando tem o mesmo comportamento, você pode omitir -as opções.
— perror

1
@ erro Isso está errado. Muitas versões psdo não permitem omitir o -. A versão Linux possui opções com e sem -, mas a maioria possui significados diferentes (compatibilidade entre BSD e System V).
— Gilles 'SO- stop be evil'

1
É verdade que, na maioria das vezes, eu só uso ps aux... Então, posso estar (parcialmente) errado. Desculpe.
— perror

13

Posso ser um dinossauro, mas acho que usar habitualmente "cvf" em vez de "-cvf" é provavelmente mais portátil. Eu imagino que a maioria das distribuições Linux use tar GNU, e eu acho que os * BSDs também, mas você encontrará Unixes proprietários que ainda usam o tar SysV antigo, que exigia que você não usasse '-' nas opções .

Eu não uso "-cvf" (ou "-xf" ou o que quer que seja) e não tenho problemas, mesmo com o último recurso do Arch linux.

E apenas como uma observação, acho que você pode usar as opções de comando "jar" padrão da Sun com ou sem um '-' também.


Concordo com a sua resposta, mesmo que a página de informações do tar (que é muito clara sobre os três estilos de especificação de opções) diga que as opções antigas são mantidas apenas para compatibilidade e há várias opções que NÃO têm correspondência antiga.
— David Costa

1
Você está errado: o tar no AT&T UNIX foi escrito para não ter um - mas ele aceita o - e o ignora. A única maneira portátil de chamar tar é chamá-lo sem a - e se você encontrar uma implementação "tar" que não aceita coisas sem -, isso não é tar.
— schily

3

Existem poucos programas no UNIX que não seguem o padrão de opção atual.

Uma é dd, mas o dd foi derivado do programa de mainframe IBM DDR(Disk Dump and Restore).

Um é are o outro é tar. Pela minha informação, o tar queria ser semelhante ao ar.

Todas as implementações de tar funcionam sem o - e nenhuma implementação útil requer o -. Portanto, se você gosta de escrever scripts portáteis, verifique o padrão SUSv2 e use apenas uma linha de comando compatível com o SUSv2.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.