Warum kann -z nicht die letzte Befehlszeilenoption sein, die mit tar verwendet wird?

4253
Lazer
$ ls one.tar.gz one.tar.gz $ tar -xvfz one.tar.gz tar: z: Cannot open: No such file or directory tar: Error is not recoverable: exiting now $ tar -xvzf one.tar.gz one $ tar -xzvf one.tar.gz one $ tar -zxvf one.tar.gz one $ 
7

2 Antworten auf die Frage

15
Dennis Williamson

Der -fSchalter benötigt ein Argument (den Dateinamen). Wenn danach zerscheint f, wird der Dateiname verwendet.

tar -xvfz one.tar.gz 

ist das gleiche wie

tar -xvf z one.tar.gz 

Wenn Sie das getan hätten:

tar -xvf -z one.tar.gz 

Dann -zwäre der Dateiname übernommen worden und Sie hätten einen ähnlichen Fehler erhalten.

Dies hätte jedoch funktioniert:

tar -xvz -f one.tar.gz 

Die GNU- tarManpage besagt:

Das erste Argument für tar muss eine der Optionen sein: Acdrtux, gefolgt von optionalen Funktionen. Die letzten Argumente für tar sind die Namen der Dateien oder Verzeichnisse, die archiviert werden sollen.

Beachten Sie, dass die -f filenameOption und das Argument angegeben werden müssen, sofern die Eingabe nicht von stdin erfolgt oder die Ausgabe in stdout erfolgt (sofern zutreffend) . Während die Manpage impliziert, dass die Reihenfolge festgelegt ist, können die Optionen in der Realität beliebig sein. Sogar das seltsame funktioniert (aber es funktioniert möglicherweise nicht in allen Versionen von tar):

tar -v files_to_archive* -f xyz.tar.gz -cz 

Für die Portabilität ist es wahrscheinlich besser, sich an die idiomatische Argumentreihenfolge zu halten und sogar den Bindestrich wegzulassen:

tar czvf xyz.tar.gz files_to_archive* 
z als letztes und f-Argumente schließen sich nicht aus. vor 13 Jahren 0
Das stimmt, aber das habe ich nicht gesagt. Vielleicht hätte ich deutlicher sein sollen und "unmittelbar danach" gesagt. Dennis Williamson vor 13 Jahren 0
Sie haben es nicht gesagt, aber Sie haben Ihren Satz mit "weil" begonnen, was eine Bestätigung seiner Frage ist, die behauptet, dass z nicht der letzte sein kann, was indirekt bedeutet, dass z nicht der letzte sein kann. Jedenfalls bin ich pedantisch. Wenn Sie "weil" entfernen, wird Ihre Antwort IMO verbessert. vor 13 Jahren 0
Pedantisch, ja. Ich nahm die Frage an, um ein impliziertes "in diese Reihenfolge" aufzunehmen. Meistens sehen Sie mit "tar" alle Switches verkettet und nicht wie in Ihrer Antwort getrennt. Es gibt keinen Grund, warum eine Person es nicht so machen kann, wie Sie es zeigen, aber die Redewendung ist so, wie es in den ersten beiden erfolgreichen Beispielen in der Frage gezeigt wird: ` Dennis Williamson vor 13 Jahren 0
6

z kann zuletzt verwendet werden:

tar -x -v -f foo.tar.gz -z 

Wie von @Dennis angegeben, ist das f- Flag jedoch ein Argument.