Ich benutze GNU Teer. Es kann den Komprimierungstyp beim Komprimieren / Dekomprimieren von Dateien automatisch erkennen. Aber ich muss ein Archiv von stdin dekomprimieren und der Komprimierungstyp ist unbekannt. Mir ist aufgefallen, dass Teer mir richtige Vorschläge geben kann, wie:
tar: Archive is compressed. Use -z option
Aber ich möchte, dass tar diese Komprimierungsoption automatisch verwendet, ohne mich zu bitten, dieses Argument einzugeben. Wie kann ich das machen? Warum nicht einfach tar dekomprimieren, da es den Komprimierungstyp bereits kennt?
Vielen Dank!
linux
compression
tar
James
quelle
quelle
tar
besteht darin, dassstdin
erst nach dem Lesen bekannt ist, über welche Art von Daten sie verfügen. Bis dahin ist es zu spät, das Dekomprimierungsprogramm aufzurufen. Es unterstützt gzip, bzip2 und andere. Es ist nicht einfach, dieses Problem zu umgehen (die Daten müssten gepuffert werden). Sie müssen es also nur noch einmal versuchen.fork()
/exec()
-Methode mehr verwenden , um die Daten durch ein Dekomprimierungsdienstprogramm zu leiten. Das Dienstprogramm würde aus derstdin
Pipe lesen und die ersten 4 KB würden jetzt fehlen. Es gibt keine Möglichkeit, die Daten nach dem Lesen wieder in die Pipe einzufügen.cat buffer - | gunzip
. (Alternativ können nicht blockierende E / A verwendet werden, um die Notwendigkeit eines zusätzlichen Prozesses zu vermeiden.)Antworten:
Dies ist nicht die Antwort, die Sie hören möchten, aber dies wird von GNU tar gemäß seinem Handbuch nicht unterstützt:
- 8.1.1 Komprimierte Archive erstellen und lesen
quelle
Schließlich wurde mir klar, dass ich das Archiv von stdin nicht von tar erkennen und dekomprimieren lassen kann, weil ich GNU tar verwende. BSD-Teer kann dies ohne Probleme automatisch tun. Deshalb entscheide ich mich, jetzt in meinem Skript bsdtar anstelle von tar zu verwenden.
quelle