Die andere Antwort ist richtig: Sie können ein komprimiertes Teerarchiv nicht ordnungsgemäß aktualisieren, ohne es zu dekomprimieren. Die GNU-TAR-Dokumentation weist darauf hin, und der Versuch, ein Update durchzuführen, schlägt mit einer expliziten Fehlermeldung fehl:
$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
Allerdings sollten Sie in einem schmutzigen interessiert sein Art-of-Werk - Lösung , die nicht Dekompression erfordert, kann ich ein, liefern basierend auf den folgenden Beobachtungen:
- Das Anhängen von bzip2-Streams mit
cat
wird unterstützt und erzeugt einen gültigen bzip2-Stream (dasselbe gilt für gzip).
- Das Anhängen von Tars mit
cat
erzeugt keine gültige TAR-Datei, weshalb die --concatenate
Option vorhanden ist. Wir können jedoch TAR bitten, so zu tun, als ob sie gültig wäre:
Es mag Ihnen intuitiver erscheinen, zwei Archive mit cat zu verketten oder zu versuchen, anstatt die --concatenate
Operation zu verwenden. Schließlich ist cat das Dienstprogramm zum Kombinieren von Dateien.
Tar-Archive enthalten jedoch eine Dateiende-Markierung, die entfernt werden muss, wenn die verketteten Archive ordnungsgemäß als ein Archiv gelesen werden sollen. --concatenate
Entfernt die Markierung für das Ende des Archivs aus dem Zielarchiv, bevor jedes neue Archiv angehängt wird. Wenn Sie die Archive mit cat kombinieren, ist das Ergebnis kein gültiges Archiv im Tar-Format. Wenn Sie Dateien aus einem Archiv abrufen müssen, das mit dem Dienstprogramm cat hinzugefügt wurde, verwenden Sie die Option --ignore-zeros
( -i
).
Basierend auf diesem Wissen können wir zum Beispiel Folgendes tun:
cat {one,two}.tar.bz2 >combined.tar.bz2
Dies führt, wie im obigen Dokumentationsausschnitt erläutert, zu einer ungültigen TAR-Datei, deren Verwendung --ignore-zeros
jedoch weiterhin vollständig gelesen werden kann:
## Show contents of `one.tar.bz2'
$ tar tf one.tar.bz2
a
b
## Show contents of `two.tar.bz2'
$ tar tf two.tar.bz2
c
## Show contents of `combined.tar.bz2', bypassing the bad format
$ tar tif combined.tar.bz2
a
b
c
Beachten Sie, wie oben alle drei Dateien aus den beiden ursprünglichen Archiven -i
aufgelistet werden , während beim Weglassen (korrekt) nur die Dateien aus dem ersten Originalarchiv aufgelistet werden:
$ tar tf combined.tar.bz2
a
b
Auch dies ist nichts weiter als ein schmutziger Trick, aber es kann nützlich sein, wenn Sie sowohl die Schreib- als auch die Leseseite steuern und sicherstellen können, dass -i
dies beim Versuch verwendet wird, aus auf diese Weise erstellten Dateien zu lesen.