Frage Warum funktioniert 'tar -xvfz' nicht, aber `tar xvfz` funktioniert?


tar -xvfz foo.tar.gz gibt einen Fehler zurück tar: z: Cannot open: No such file or directory

Das ist völlig verständlich - die f switch erwartet einen Dateinamen und muss daher der letzte sein.

Den Bindestrich jedoch weglassen tar xvfz foot.tar.gz bearbeitet und dekomprimiert und entpackt die Datei.

Ich habe das auf OS X 10.8 und Ubuntu 12.04 getestet.

Irgendwelche Ideen warum?

[bearbeitet, um hinzuzufügen]

Ich benutze immer tar -zxvf foo.tar.gz. Diese Frage ist jedoch wegen entstanden diese xkcdund meine Überraschung, als jemand darauf bestand tar xvfz würde funktionieren.

enter image description here


38
2018-02-01 14:44


Ursprung


So leid: xkcd.com/1168 - MichaelHouse


Antworten:


tar hat 3 Arten von Syntax (nach diese ):

  • lange Optionen (--datei)
  • kurze Optionen (-f)
  • alte Optionen (f)

Für die alte Optionssyntax müssen alle Buchstaben "tar" folgen und müssen alle in einen einzigen Büschel ohne Leerzeichen fallen. Die Reihenfolge der Buchstaben spielt keine Rolle, solange die Argumente für diese Buchstaben nach der Menge der Optionen in derselben Reihenfolge stehen.

Diese alte Art, Tar-Optionen zu schreiben, kann sogar erfahrene Benutzer überraschen. Zum Beispiel die beiden Befehle:

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

sind ganz anders. Das erste Beispiel verwendet 'archive.tar.gz' als Wert für die Option 'f' und erkennt die Option 'z'. Das zweite Beispiel verwendet jedoch 'z' als Wert für die Option 'f' - wahrscheinlich nicht das, was beabsichtigt war.

Alte Optionen werden zur Kompatibilität mit alten Versionen von tar beibehalten.

Der Befehl mit einem '-' ist äquivalent zu

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

Aus diesem Grund arbeitet dein Beispiel ohne "-" und nicht mit "-"


60
2018-02-01 15:03



Das erklärt ziemlich viel Dinge - danke. - anu
wtf unix - BlueRaja