Jak stworzyć archiwum tar podzielone na wiele plików?

27

Według tej strony można pozwolić tarowi na utworzenie archiwum tar „podzielonego” na pliki 100 Mb:

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

Problem polega na tym, że to polecenie będzie wymagało interakcyjnego podania nowej nazwy pliku dla następnego pliku, po wypełnieniu pierwszego pliku.

Czy ktoś wie, jak pominąć ten interaktywny krok i pozwolić tarowi wykonać „podział” automatycznie?

Samuel Lampa
źródło
Powiązane z tym: unix.stackexchange.com/q/61774/6860
sampablokuper

Odpowiedzi:

20

Spójrz na --new-volume-scriptopcję, która pozwala zastąpić mechanizm monitowania innym mechanizmem lub wygenerowaną nazwą pliku. ( (tar.info)Multi-Volume Archivesna tarstronie informacyjnej). Problem splitpolega na tym, że musisz catzrobić wszystko razem, aby cokolwiek zrobić, podczas gdy archiwum wieloczęściowe powinno być nieco bardziej elastyczne.

geekozaur
źródło
To prawda, oczywiście.
Eduardo I.
2
Dzięki, tego szukałem! Teraz dowiedziałem się, że tak naprawdę jest kilka instrukcji (w tym przykład) dostępnych tutaj: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa
Problem polega na tym, że jest to nadmiernie zaangażowane bzdury i promuje przeciwieństwo odpowiednich aplikacji w stylu uniksowym.
Jan Kyu Peblik
33

Możesz użyć do tego podziału:

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

To mówi tarowi, aby wysłał dane do standardowego wyjścia i podzielił, aby wybrać je ze standardowego standardu - dodatkowo używając sufiksu numerycznego ( -d), rozmiaru fragmentu ( -b) 100 M i używając 'tardisk' jako podstawy dla powstałych nazw plików (tardisk00, tardisk01, tardisk02 itp.).

Aby później wyodrębnić dane, możesz użyć tego:

cat tardisk* | tar xzpvf -
Eduardo I.
źródło
1
Mała korekta -ddotyczy sufiksu numerycznego, a nie prefiksu.
yclian
8

Oczywiście najlepszą opcją jest --new-volume-scriptopcja.

Ale jeśli znasz rozmiar pliku (w tym przypadku duży plik.tgz), możesz to zrobić również:

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

Podsumowanie:

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

(Dla -L, podaj tyle, ile potrzeba, aby całkowita suma plików tar była większa niż largefile.tgz)

Jeśli próbujesz tarutworzyć strukturę drzewa katalogów

użytkownik1260486
źródło
1

Mam go do pracy z następującymi poleceniami:

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

Jedynym problemem jest to, że part_1.tartak naprawdę będzie to ostatni plik, a pozostałe zostaną przesunięte o jeden. Czyli part_2.tarjest rzeczywiście pierwsza część, a part_k.tarto (n - 1)th część. Naprawienie tego za pomocą jakiegoś skryptu powłoki jest trywialne i pozostawione jako ćwiczenie dla czytelnika.

strupo
źródło
1

automatycznie utworzy pliki o rozmiarze 1,1 GB, jeśli rozmiar tar jest większy, możesz zwiększyć liczbę, na przykład 1000 {2..1000} lub zwiększyć argument wejściowy do długości taśmy.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
GraphicalDot
źródło