tar cvf o tar -cvf?


24

Ho imparato a usare tar senza '-' per le opzioni, come, tar cvfz dir.tar.gz Directory/ma di recente mi sono imbattuto in una tar -czvfsintassi leggermente diversa (penso che la 'f' debba essere l'ultima opzione in questo caso).

Entrambi funzionano su Linux e Mac OS. Esiste una sintassi raccomandata, con ou senza '-' che è più portatile attraverso i gusti unix?



Il motivo per cui -fdeve essere l'ultima opzione è perché accetta un argomento e tale argomento può essere dato toccando l'opzione. tar -cvfz dir.tar.gz Directorysignifica creare un archivio denominato zche contiene i file dir.tar.gze Directory.
JoL

Risposte:


27

tarè uno di quegli antichi comandi dei tempi in cui la sintassi delle opzioni non era stata standardizzata. Poiché tutte le invocazioni utili tarrichiedono di specificare un'operazione prima di fornire qualsiasi nome di file, la maggior parte delle tarimplementazioni interpretano il loro primo argomento come un'opzione anche se non inizia con a -. Le implementazioni più recenti accettano a -; l'unica eccezione di cui sono a conoscenza è Minix .

Le versioni precedenti di POSIX e Single Unix includevano un tarcomando senza -prima dell'identificatore di operazione. Single Unix v2 aveva entrambi gli archivi tradizionali cpioe tar, ma pochissimi flag potevano essere standardizzati perché le implementazioni esistenti erano troppo diverse, quindi gli standard introdussero un nuovo comando pax, che è l'unico archiviatore standard da Single Unix v3 . Se si desidera la conformità standard, utilizzare pax, ma attenzione che molte distribuzioni Linux non lo includono nella loro installazione di base, e non è presente paxin Minix . Se in pratica si desidera la portabilità, utilizzare tar cf filename.tar.



1
Si noti inoltre che se una distro Linux contiene pax, di solito viene fornita la peggiore implementazione pax conosciuta (GNU pax) che dovrebbe essere evitata a causa di molti bug.
schily,

Inoltre, il pscomando ha lo stesso comportamento, è possibile omettere -per le opzioni.
perror

1
@perror È sbagliato. Molte versioni di psnon ti consentono di omettere il -. La versione Linux ha opzioni con e senza -, ma la maggior parte ha significati diversi (compatibilità BSD vs System V).
Gilles 'SO- smetti di essere malvagio' il

1
È vero che, il più delle volte, uso solo ps aux... Quindi, potrei essere (in parte) sbagliato. Scusate.
perror

13

Potrei essere un dinosauro, ma penso che l'uso abituale di "cvf" invece di "-cvf" sia probabilmente più portatile. Immagino che la maggior parte delle distribuzioni Linux utilizzino tar GNU, e immagino che lo facciano anche i * BSD, ma troverai Unix proprietari che usano ancora il vecchio tar SysV, che richiedeva di non usare un '-' nelle opzioni .

Non uso "-cvf" (o "-xf" o altro) e non ho problemi nemmeno con Bleeding Edge Arch Linux.

E proprio come nota a margine, penso che puoi usare anche le opzioni di comando "jar" dello standard Sun con o senza un '-'.


Sono d'accordo con la tua risposta, anche se la pagina di informazioni di tar (che è molto chiara sui tre stili di specifica delle opzioni) dice che le vecchie opzioni sono conservate solo per compatibilità e ci sono un sacco di opzioni che NON hanno una corrispondenza precedente.
David Costa,

1
Ti sbagli: tar su AT&T UNIX è stato scritto per non avere un - ma accetta il - e lo salta. L'unico modo portatile per chiamare tar è chiamarlo senza - e se mai trovi un'implementazione "tar" che non accetta le cose senza -, questo non è tar.
schily,

3

Esistono pochi programmi su UNIX che non seguono l'attuale standard delle opzioni.

Uno è dd, ma dd è stato derivato dal programma mainframe IBM DDR(Disk Dump and Restore).

Uno è are l'altro è tar. Dalle mie informazioni, tar voleva essere simile ad ar.

Tutte le implementazioni tar funzionano senza - e nessuna implementazione utile richiede -. Quindi, se ti piace scrivere script portatili, controlla lo standard SUSv2 e usa solo una riga di comando compatibile con SUSv2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.