Wie erstelle ich ein Tar-Archiv, das in mehrere Dateien aufgeteilt ist oder mehrere Dateien umfasst?

26

Laut dieser Seite kann man tar ein Tar-Archiv "aufteilen" lassen in 100 Mb-Dateien:

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

Das Problem ist, dass Sie bei diesem Befehl interaktiv einen neuen Dateinamen für die nächste Datei eingeben müssen, nachdem die erste Datei gefüllt wurde.

Kennt jemand eine Möglichkeit, diesen interaktiven Schritt zu überspringen und tar die "Aufteilung" automatisch durchführen zu lassen?

Samuel Lampa
quelle
Diesbezüglich
sampablokuper

Antworten:

19

Sehen Sie sich die --new-volume-scriptOption an, mit der Sie den Eingabeaufforderungsmechanismus durch einen anderen Mechanismus oder durch einen generierten Dateinamen ersetzen können. ( (tar.info)Multi-Volume Archivesauf der tarInfoseite.) Das Problem dabei splitist, dass Sie catdie Teile wieder zusammenfügen müssen, um etwas zu tun, wohingegen ein Multivolume-Archiv etwas flexibler sein sollte.

Geekosaurier
quelle
Das stimmt natürlich.
Eduardo I.
2
Danke, das habe ich gesucht! Ich habe jetzt herausgefunden, dass es tatsächlich einige Anleitungen (inkl. Beispiel) gibt: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa
Das Problem dabei ist, dass es zu viel Unsinn ist und das Gegenteil von richtigen Unix-Apps fördert.
Jan Kyu Peblik
33

Sie können hierfür split verwenden:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

Dies weist tar an, die Daten an stdout zu senden und zu teilen, um sie aus stdin auszuwählen - zusätzlich unter Verwendung eines numerischen Suffix ( -d), einer -bBlockgröße ( ) von 100M und unter Verwendung von 'tardisk' als Basis für die resultierenden Dateinamen (tardisk00, tardisk01, tardisk02 usw.).

Um die Daten anschließend zu extrahieren, können Sie dies verwenden:

cat tardisk* | tar xzpvf -
Eduardo I.
quelle
1
Kleine Korrektur, -dgilt für numerisches Suffix, nicht für Präfix.
yclian
8

Die beste Option ist natürlich die --new-volume-scriptOption.

Wenn Sie die Größe der Datei kennen (in diesem Fall largefile.tgz), können Sie dies auch tun:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

Zusammenfassung:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(Geben Sie für -L so viele an, wie erforderlich sind, damit die Gesamtsumme der TAR-Dateien größer als largefile.tgz ist.)

Wenn Sie versuchen, tareine Verzeichnisbaumstruktur zu erstellen

user1260486
quelle
1

Ich habe es mit den folgenden Befehlen arbeiten:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

Das einzige Problem ist, dass part_1.tares sich tatsächlich um die letzte Datei handelt und die anderen um eine verschoben werden. Dh part_2.tarist eigentlich der erste Teil, und part_k.tarist der (n - 1)th Teil. Das Problem mit einem Shell-Skript zu beheben, ist trivial und wird dem Leser als Übung überlassen.

strupo
quelle
1

Es werden automatisch Dateien mit einer Größe von 1,1 GB erstellt. Wenn Ihr Teer größer ist, können Sie die Anzahl erhöhen, z. B. 1000 {2..1000}, oder Sie können die Eingabe auf Bandlänge erhöhen.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
GraphicalDot
quelle