Im xModus alle POSIX-kompatible Versionen tarerfordern-f die Eingabe Archiv von irgendwo anders als der Standard zu lesen. Zum Lesen von stdinPOSIX müssen Sie -außerdem den Dateinamen angeben:
$ tar -xf - < file.tar
Sowohl GNU tarals auch bsdtarverstehen diese Syntax.
GNU tarunterscheidet sich von POSIX dadurch, dass es ein tarArchiv stdin ohne explizites -f -Argument akzeptiert . Tatsächlich sagt POSIX, dass es ohne -f -überhaupt nicht verwendet werden sollte stdin. Aus Ihrer Frage geht hervor, dass Sie Ihre Befehlszeilenbeispiele von einem GNU- tarBenutzer erhalten.
bsdtarfolgt POSIX in der Anforderung, -f -ob es aus stdineiner Datei gelesen werden soll.
Das bringt uns zu Ihrer eigentlichen Frage: Wenn nicht angegeben -f -, warum bsdtarliest man dann /dev/st0? Das ist die Standardeinstellung, die ich oben erwähnt habe. POSIX sagt nur, dass diese Standardeinstellung "systemabhängig" ist. bsdtarwählt den Namen des ersten zu verwenden Bandlaufwerk ist dev Knoten , der passiert werden /dev/st0auf Linux. 1
Sie müssen stattdessen Folgendes sagen:
$ bsdtar -xf - < archive.tar.gz
Oder überspringen Sie die Umleitung vollständig:
$ bsdtar -xf archive.tar.gz
Ich habe entfernt, -zweil beide bsdtarund GNU tardie gzipKomprimierung im xModus automatisch erkennen. (Alte Versionen von GNU tarerforderten ein Komprimierungstyp-Flag, aber die automatische Erkennung wurde in Version 1.15 hinzugefügt , die 2004 veröffentlicht wurde.)
Ich habe das -C .Bit auch entfernt, da es nur sagt bsdtar, dass vor dem Entpacken des Archivs in das aktuelle Verzeichnis gewechselt werden soll. Es ist ein No-Op .
- Warum standardmäßig das erste Bandlaufwerk verwenden? Weil
tarist der Tape ARchiver . tarstammt aus einer Zeit, als fast jede Unix-Box tatsächlich ein Bandlaufwerk hatte.
tar --versionOS X so nah wie möglich an tar ist. Unter OS X kann ich es ausführenbsdtar 2.8.3 - libarchive 2.8.3.