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


7
$ 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
$

Antworten:


16

Der -fSchalter akzeptiert ein Argument (den Dateinamen). Wenn znach dem angezeigt fwird, wird dies als Dateiname angenommen.

tar -xvfz one.tar.gz

ist das gleiche wie

tar -xvf z one.tar.gz

Wenn Sie dies getan hätten:

tar -xvf -z one.tar.gz

dann -zwäre als Dateiname genommen worden und Sie hätten einen ähnlichen Fehler bekommen.

Dies hätte jedoch funktioniert:

tar -xvz -f one.tar.gz

In der GNU- tarManpage heißt es:

Das erste Argument für tar muss eine der folgenden 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 , es sei denn, die Eingabe erfolgt von stdin oder die Ausgabe erfolgt stdout (falls zutreffend) . Während die Manpage impliziert, dass die Reihenfolge festgelegt ist, können die Optionen in Wirklichkeit in beliebiger Reihenfolge sein. Sogar dieses 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 als Argument schließen sich nicht gegenseitig aus.

Das stimmt, aber das habe ich nicht gesagt. Vielleicht hätte ich expliziter sein und "sofort danach" sagen sollen.
Bis auf weiteres angehalten.

Sie haben es nicht gesagt, aber Sie haben Ihren Satz mit "weil" begonnen, was eine Bestätigung seiner Frage ist, die behauptet, z könne nicht zuletzt sein, was indirekt impliziert, dass z nicht zuletzt sein kann. Wie auch immer, ich bin pedantisch. Wenn Sie "weil" entfernen, wird Ihre Antwort IMO verbessert.

Pedantisch, ja. Ich nahm die Frage an, um ein implizites "in dieser Sequenz" aufzunehmen. In den meisten tarFällen werden alle Schalter verkettet und nicht getrennt, wie in Ihrer Antwort angegeben. Es gibt keinen Grund, warum eine Person es nicht so machen könnte, wie Sie es zeigen, aber die Redewendung ist, es so zu machen, wie es in den ersten beiden erfolgreichen Beispielen in der Frage gezeigt wird : <operation> <option> <option> <file>. Die Redewendung führt zur Folgerung.
Bis auf weiteres angehalten.

6

z kann zuletzt verwendet werden:

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

Aber wie von @Dennis angegeben, nimmt die f- Flagge ein Argument an.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.