Während tar
kann Dateien zu einem bereits bestehenden Archiv hinzufügen, es kann nicht komprimiert werden. Sie müssen bunzip2
das komprimierte Archiv, wobei ein Standard-Tarball zurückbleibt. Sie können dann tar
verwenden die Fähigkeit von , Dateien zu einem bestehenden Archiv hinzuzufügen und dann mit bzip2
erneut zu komprimieren .
Aus dem Handbuch:
-r Like -c, but new entries are appended to the archive. Note that this only
works on uncompressed archives stored in regular files. The -f option is
required.
Die andere Antwort ist richtig:Sie können ein komprimiertes Tar-Archiv nicht richtig aktualisieren, ohne es zu dekomprimieren. Die GNU-Tar-Dokumentation weist darauf hin, und der Versuch einer Aktualisierung 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 an einer schmutzigen Art-of-Works-Lösung interessiert sein, die keine Dekomprimierung erfordert, kann ich Ihnen basierend auf den folgenden Beobachtungen eine anbieten:
- Anhängen von bzip2-Streams mit
cat
wird unterstützt und erzeugt einen gültigen bzip2-Stream (dasselbe gilt für gzip); - Anhängen von Tars mit
cat
erzeugt keine gültige tar-Datei, weshalb die--concatenate
Option existiert, aber wir können tar bitten, vorzutäuschen, dass sie gültig ist:
Es mag Ihnen intuitiver erscheinen, cat zu verwenden oder zu versuchen, zwei Archive zu verketten, anstatt --concatenate
zu verwenden Betrieb; schließlich ist cat das Dienstprogramm zum Kombinieren von Dateien.
Allerdings enthalten tar-Archive eine Dateiende-Markierung, die entfernt werden muss, wenn die verketteten Archive richtig als ein Archiv gelesen werden sollen. --concatenate
entfernt die Archivende-Markierung aus dem Zielarchiv, bevor jedes neue Archiv angehängt wird. Wenn Sie cat verwenden, um die Archive zu kombinieren, wird das Ergebnis kein gültiges Archiv im tar-Format sein. Wenn Sie Dateien aus einem Archiv abrufen müssen, das zur Verwendung des cat-Dienstprogramms hinzugefügt wurde, verwenden Sie den --ignore-zeros
(-i
)-Option.
Basierend auf diesem Wissen können wir beispielsweise Folgendes tun:
cat {one,two}.tar.bz2 >combined.tar.bz2
Dies führt, wie der obige Dokumentationsausschnitt erklärt, zu einer ungültigen TAR-Datei, die jedoch --ignore-zeros
verwendet , es kann immer noch vollständig gelesen werden:
## 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, dass oben alle drei Dateien aus den ursprünglichen zwei Archiven aufgeführt sind, wobei -i
weggelassen wurde listet (korrekt) nur die Dateien aus dem ersten Originalarchiv auf:
$ tar tf combined.tar.bz2
a
b
Noch einmal, das ist nichts weiter als ein schmutziger Trick, aber es könnte nützlich sein, wenn Sie sowohl die Schreib- als auch die Leseseite kontrollieren und sicherstellen können, dass -i
wird verwendet, wenn versucht wird, Dateien zu lesen, die auf diese Weise erstellt wurden.