Ich habe eine TAR-Datei, die ich in mehrere kleinere TAR-Dateien aufteilen möchte. Dies wäre einfach split
, aber ich möchte, dass die aufgeteilten Dateien selbst vollständig verwendbare TAR-Dateien sind, was split
nicht möglich ist, da sie an beliebigen Punkten und nicht an Dateigrenzen aufgeteilt werden.
Wie kann man eine TAR-Datei an den Dateigrenzen in kleinere Teile aufteilen, sodass keine Datei zur Hälfte in einem Teer und zur Hälfte im anderen Teer liegt?
Lösungen, die keinen Teer verwenden und die Aufgabe auf andere Weise erfüllen, wären ebenfalls willkommen.
PS: Ja, es wird Fälle geben, in denen dies nicht möglich ist (Teer mit Dateien, die größer als die geteilte Größe sind).
tsize=
, aber ich habe nichts wie [ bsdtar ] ( code.google.com/p/libarchive/wiki) gesehen / ManPageBsdtar1 )@archive
, die die Aufgabe möglicherweise abschließen.Antworten:
Es gibt ein Tool,
tarsplitter
das Teerarchive sicher aufteilt. Sie geben die Anzahl der Teile an, in die Sie das Archiv aufteilen möchten, und es wird ermittelt, wo sich die Dateigrenzen befinden.https://github.com/AQUAOSOTech/tarsplitter
Die kleineren Ausgabearchive haben nicht genau die gleiche Größe, sind aber ziemlich nahe beieinander - vorausgesetzt, die Dateien im Originalarchiv weisen keine großen Unterschiede auf.
Beispiel - Teilen Sie das Archiv "files.tar" in 4 kleinere Archive auf:
tarsplitter -p 4 -i files.tar -o /tmp/parts
Erstellen:
quelle
Wenn die Neuerstellung des Archivs eine Option ist, sollte dieses Bash-Skript den Trick ausführen (dies ist nur eine mögliche Methode):
Es sortiert (in aufsteigender Reihenfolge) alle Dateien nach Größe und beginnt mit der Erstellung der Archive. Es wechselt zu einem anderen, wenn die Größe den Schwellenwert überschreitet.
HINWEIS: Stellen Sie sicher, dass das Ausgabeverzeichnis leer ist.
BENUTZUNG AUF EIGENE GEFAHR
quelle
Ich glaube nicht, dass es dafür Tools gibt, aber es wäre ziemlich einfach, sich selbst zu implementieren. Das Teerformat ist ziemlich einfach, so dass Sie nur ein Format benötigen
split
, das dies berücksichtigt. Die grundlegende Theorie besteht darin, einen Header zu lesen, die angegebene Länge der eingehenden Datei zu überprüfen und zu bestimmen, ob jetzt geteilt oder die aktuelle Datei ausgeschrieben werden soll. Lesen Sie den nächsten Header und wiederholen Sie den Vorgang.quelle
Der
tarsplitter
von @ruffrey angebotene Befehl scheint eine großartige Option zu sein.Ich habe es heruntergeladen und dann:
um es kompilieren zu können. (Hmm ... ist es bereits in Homebrew? Nein.) Der Befehl wurde auf meinem Mac unter 10.14 erfolgreich kompiliert. Ich mache gerade eine Kopie meines gigantischen Archivs, um
tarsplitter
dagegen zu laufen . Zwei Daumen hoch für die Empfehlung.Ich bin ein relativer Neuling, wenn es darum geht, den Code anderer Leute zu kompilieren. Daher wäre es hilfreich gewesen, wenn der Autor klargestellt hätte, dass er in GO anstelle von C / C ++ geschrieben wurde und einen neuen Compiler installiert haben musste. Funktioniert auch
make install
nicht, da es keine Installation im gibtMakefile
, also habe ich es einfach gemacht:Schön, dass der GO-Compiler für Mac, Linux und Windows gebaut wurde.
quelle