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?

ascobol
fonte
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.

Gilles 'SO- parar de ser mau'
fonte
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.

Bruce Ediger
fonte
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.

esperto
fonte