tar cvf o tar -cvf?

24

Aprendí a usar tar sin '-' para las opciones, tar cvfz dir.tar.gz Directory/pero recientemente encontré una tar -czvfsintaxis ligeramente diferente (creo que 'f' debe ser la última opción en este caso).

Ambos funcionan en Linux y Mac OS. ¿Existe una sintaxis recomendada, con ou sin '-', que es más portátil en todos los sabores de Unix?

ascobol
fuente
1
Consulte también: unix.stackexchange.com/questions/13573/…
hasta el
La razón por la que -fdebe ser la última opción es porque toma un argumento y ese argumento puede darse tocando la opción. tar -cvfz dir.tar.gz Directorysignifica crear un archivo llamado zque contiene los archivos dir.tar.gzy Directory.
JoL

Respuestas:

27

tares uno de esos comandos antiguos de los días en que la sintaxis de la opción no se había estandarizado. Debido a que todas las invocaciones útiles tarrequieren la especificación de una operación antes de proporcionar cualquier nombre de archivo, la mayoría de las tarimplementaciones interpretan su primer argumento como una opción, incluso si no comienza con a -. La mayoría de las implementaciones actuales aceptan a -; La única excepción que conozco es Minix .

Las versiones anteriores de POSIX y Single Unix incluían un tarcomando sin -antes del especificador de operación. Single Unix v2 tenía archivadores tradicionales cpioy tar, pero muy pocos indicadores podían estandarizarse porque las implementaciones existentes eran demasiado diferentes, por lo que los estándares introdujeron un nuevo comando pax, que es el único archivador estándar desde Single Unix v3 . Si desea el cumplimiento estándar, use pax, pero tenga en cuenta que muchas distribuciones de Linux no lo incluyen en su instalación base, y no hay ninguna paxen Minix . Si desea portabilidad en la práctica, use tar cf filename.tar.

Gilles 'SO- deja de ser malvado'
fuente
1
También tenga en cuenta que si una distribución de Linux contiene pax, generalmente viene con la implementación de pax peor conocida (GNU pax) que debe evitarse debido a muchos errores.
schily
Además, el pscomando tiene el mismo comportamiento, puede omitir -para las opciones.
Perror
1
@perror Eso está mal. Muchas versiones de psno te permiten omitir el -. La versión de Linux tiene opciones con y sin -, pero la mayoría tiene diferentes significados (compatibilidad BSD vs sistema V).
Gilles 'SO- deja de ser malvado'
1
Es cierto que, la mayoría de las veces, solo uso ps aux... Entonces, podría estar (en parte) equivocado. Lo siento.
Perror
13

Puedo ser un dinosaurio, pero creo que usar habitualmente "cvf" en lugar de "-cvf" es probablemente más portátil. Me imagino que la mayoría de las distribuciones de Linux usan tar GNU, y supongo que los * BSD también lo hacen, pero encontrará Unixes patentados que todavía usan el viejo tar SysV, que solía requerir que no use un '-' en las opciones .

No uso "-cvf" (o "-xf" o lo que sea) y no tengo problemas ni siquiera con Arch Linux.

Y solo como nota al margen, creo que también puede usar las opciones de comando "jar" estándar de Sun con o sin un '-'.

Bruce Ediger
fuente
Estoy de acuerdo con su respuesta, incluso si la página de información de tar (que es muy clara sobre los tres estilos de especificar opciones) dice que las opciones antiguas se mantienen solo por compatibilidad y que hay un montón de opciones que NO tienen correspondencia antigua.
David Costa
1
Estás equivocado: tar en AT&T UNIX fue escrito para no tener un - pero acepta el - y lo omite. La única forma portátil de llamar a tar es llamarlo sin el, y si alguna vez encuentra una implementación "tar" que no acepte cosas sin, esto no es tar.
schily
3

Ha habido pocos programas en UNIX que no siguen el estándar de opción actual.

Una es dd, pero dd se derivó del programa mainframe de IBM DDR(Disk Dump and Restore).

Uno es ary el otro es tar. Según mi información, tar quería ser similar a ar.

Todas las implementaciones de tar funcionan sin el - y ninguna implementación útil requiere el -. Entonces, si desea escribir scripts portátiles, verifique el estándar SUSv2 y solo use una línea de comandos que sea compatible con SUSv2.

astuto
fuente