Im x
Modus alle POSIX-kompatible Versionen tar
erfordern-f
die Eingabe Archiv von irgendwo anders als der Standard zu lesen. Zum Lesen von stdin
POSIX müssen Sie -
außerdem den Dateinamen angeben:
$ tar -xf - < file.tar
Sowohl GNU tar
als auch bsdtar
verstehen diese Syntax.
GNU tar
unterscheidet sich von POSIX dadurch, dass es ein tar
Archiv 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- tar
Benutzer erhalten.
bsdtar
folgt POSIX in der Anforderung, -f -
ob es aus stdin
einer Datei gelesen werden soll.
Das bringt uns zu Ihrer eigentlichen Frage: Wenn nicht angegeben -f -
, warum bsdtar
liest man dann /dev/st0
? Das ist die Standardeinstellung, die ich oben erwähnt habe. POSIX sagt nur, dass diese Standardeinstellung "systemabhängig" ist. bsdtar
wählt den Namen des ersten zu verwenden Bandlaufwerk ist dev Knoten , der passiert werden /dev/st0
auf 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, -z
weil beide bsdtar
und GNU tar
die gzip
Komprimierung im x
Modus automatisch erkennen. (Alte Versionen von GNU tar
erforderten 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
tar
ist der Tape ARchiver . tar
stammt aus einer Zeit, als fast jede Unix-Box tatsächlich ein Bandlaufwerk hatte.
tar --version
OS X so nah wie möglich an tar ist. Unter OS X kann ich es ausführenbsdtar 2.8.3 - libarchive 2.8.3
.