Erstellen Sie ein Tar-Archiv, das in Blöcke maximaler Größe aufgeteilt ist

83

Ich muss ein ziemlich großes Verzeichnis sichern, bin jedoch durch die Größe der einzelnen Dateien begrenzt. Ich möchte im Wesentlichen ein tar.(gz|bz2)Archiv erstellen, das in maximal 200 MB große Archive aufgeteilt ist. Clonezilla macht etwas Ähnliches, indem es Image-Backups mit folgendem Namen aufteilt:

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

Gibt es eine Möglichkeit, dies mit einem Befehl zu tun? Ich verstehe, wie man den splitBefehl verwendet, aber ich möchte nicht ein einziges Riesenarchiv erstellen und es dann in kleinere Archive aufteilen müssen, da dies den Festplattenspeicher verdoppeln würde, den ich für die erstmalige Erstellung des Archivs benötige.

Naftuli Kay
quelle
Eine weitere Frage: superuser.com/q/290986/11574
sampablokuper

Antworten:

108

Sie können tar an den split-Befehl leiten:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

Auf einigen * nix-Systemen (wie OS X) wird möglicherweise die folgende Fehlermeldung angezeigt:

split: illegal option -- -

In diesem Fall versuchen Sie dies (beachten Sie die -b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

Wenn Sie versuchen, die Datei so zu teilen, dass sie auf ein FAT32-formatiertes Laufwerk passt, verwenden Sie ein Byte-Limit von 4294967295. Beispiel:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.
Jordanien
quelle
3
Toll! Wie kann ich dann das Archiv extrahieren?
Naftuli Kay
24
Wird cat sda1.backup.tar.gz.* | tar xzvf -die Arbeit erledigen?
Naftuli Kay
3
Ja, das sollte es. splitStandardmäßig werden die Namen der Dateien so festgelegt, dass beim Sortieren nach LOCALE (was durch Shell-Globbing erfolgt) die richtige Reihenfolge eingehalten wird.
Jordan
4
Ohne ausführlich, verzichten Sie einfach tar czf ...auf das vund verschmelzen Sie cat backup.tar.gz.* | tar tar xzf - ohne v. Ich sehe keinen Nutzen aus der ausführlichen Ausgabe hier von v.
Léo Léopold Hertz 준영
1
tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgzcd /Applications/
Ich habe
13

Unter macOS splitfunktioniert der Befehl etwas anders:

$ tar cvzf - foo | split -b 2500m - foo.tgz.
Erik Allik
quelle
4

Nur zum Hinzufügen: Da die maximal zulässige Dateigröße in vfat / fat32 2 ^ 32 minus 1 (4294967295 Bytes) beträgt, lautet der Split-Befehl mit der maximal zulässigen Dateigröße in einem solchen Dateisystem:

split -b4294967295 -d my_input_file my_output_file_splitted
Aydin K.
quelle
3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

Sie benötigen ein Skript für die Automatisierung, um die Datei pseudo-tape.tar auf einen neuen Namen zu verschieben:

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"
Sergey Romanovsky
quelle
Ich habe Ihre Antwort nicht herabgestimmt, weil ich froh bin, eine zu sehen, die sie verwendet -M --tape-length. Diese Antwort ignoriert jedoch die Anforderung des OP nach einer Lösung, die gzip- oder bzip2-Komprimierung verwendet.
Sampablokuper
Achtung: Es handelt sich nicht tarum einen Tar-Klon gtar(GNU tar). Dieser Tar-Klon unterstützt das Erstellen von Archiven mit mehreren Volumes, kann / will jedoch mit einer erkennbaren Wahrscheinlichkeit keine Extraktion aus diesen Archiven mit mehreren Volumes durchführen, da fälschlicherweise behauptet wird, dass ein Folge-Volume nicht der richtige Fortsetzungsteil ist.
Schily