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!
tar
besteht darin, dass stdin
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 der stdin
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.)