Perché `tar -xvfz` fallisce, ma` tar xvfz` funziona?


41

tar -xvfz foo.tar.gz restituisce un errore tar: z: Cannot open: No such file or directory

Questo è completamente comprensibile: l' finterruttore si aspetta un nome file e quindi deve essere l'ultimo.

Tuttavia, omettendo il trattino tar xvfz foot.tar.gzfunziona, decomprime e annulla la conversione del file.

Ho provato questo su OS X 10.8 e Ubuntu 12.04.

Qualche idea sul perché?

[modificato per aggiungere]

Lo uso sempre tar -zxvf foo.tar.gz. Tuttavia, questa domanda è nata a causa di questo xkcd e la mia sorpresa quando qualcuno ha insistito sul fatto che tar xvfzavrebbe funzionato.

inserisci qui la descrizione dell'immagine


Risposte:


61

tar ha 3 tipi di sintassi (secondo questo ):

  • opzioni lunghe (--file)
  • opzioni brevi (-f)
  • vecchie opzioni (f)

Per la vecchia sintassi delle opzioni, tutte le lettere devono seguire "tar" e devono rientrare in un singolo gruppo senza spazi. L'ordine delle lettere non ha importanza, a condizione che gli argomenti di quelle lettere seguano lo stesso ordine dopo il gruppo di opzioni.

Questo vecchio modo di scrivere le opzioni tar può sorprendere anche gli utenti esperti. Ad esempio, i due comandi:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

sono abbastanza diversi. Il primo esempio usa 'archive.tar.gz' come valore per l'opzione 'f' e riconosce l'opzione 'z'. Il secondo esempio, tuttavia, usa 'z' come valore per l'opzione 'f' - probabilmente non quello che era previsto.

Le vecchie opzioni sono mantenute per la compatibilità con le vecchie versioni di tar.

Il comando con un '-' è equivalente a

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

Questo è il motivo per cui il tuo esempio funziona senza "-" e non con "-"


3
wtf unix
BlueRaja,
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.