Ich suche nach einer Möglichkeit, Tausende von .tbz-Archivdateien zu aktualisieren, daher mache ich dies mit einem Shell-Skript. Ich muss jeder eine Datei hinzufügen.
Meine Frage ist, gibt es eine schnellere Möglichkeit, dies zu tun, ohne den Inhalt jedes TBZ zu extrahieren und dann mit der neuen Datei, die im enthaltenen Teer enthalten ist, erneut zu komprimieren? Wie würden die Befehle aussehen?
Vielen Dank
linux
shell-script
shell
command-line
tar
BottleZero
quelle
quelle
Antworten:
Während
tar
Dateien zu einem bereits vorhandenen Archiv hinzugefügt werden können, können diese nicht komprimiert werden. Sie müssenbunzip2
das komprimierte Archiv verlassen und einen Standard-Tarball hinterlassen. Sie können dann dietar
Fähigkeit verwenden, Dateien zu einem vorhandenen Archiv hinzuzufügen und dann mit erneut zu komprimierenbzip2
.Aus dem Handbuch:
quelle
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:
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:
cat
wird unterstützt und erzeugt einen gültigen bzip2-Stream (dasselbe gilt für gzip).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:Basierend auf diesem Wissen können wir zum Beispiel Folgendes tun:
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: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: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.quelle
i
zur Befehlszeile hinzufügen , sehen das Ganze.