Как создать архив tar, разбитый на несколько файлов?

27

Согласно этой странице , tar может создать архив tar, «разбитый» на файлы размером 100 Мб:

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

Проблема в том, что эта команда потребует, чтобы вы в интерактивном режиме дали новое имя файла для следующего файла после заполнения первого файла.

Кто-нибудь знает способ пропустить этот интерактивный шаг, и позволить tar автоматически выполнять «расщепление»?

Самуэль Лампа
источник
Связано с этим: unix.stackexchange.com/q/61774/6860
sampablokuper

Ответы:

20

Посмотрите на --new-volume-scriptопцию, которая позволяет заменить механизм подсказок другим механизмом или сгенерированным именем файла. ( (tar.info)Multi-Volume Archivesна tarинформационной странице.) Проблема в splitтом, что вам нужно catсобирать части, чтобы что-то делать, тогда как многотомный архив должен быть немного более гибким.

geekosaur
источник
Это правда, конечно.
Эдуардо I.
2
Спасибо, это то, что я искал! Теперь я обнаружил, что на самом деле есть некоторые инструкции (в том числе пример), доступные здесь: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Сэмюэль Лампа
Проблема в том, что это чересчур бессмысленная чушь и продвигает противоположность правильных приложений в стиле Unix.
Ян Кью Пеблик
33

Вы можете использовать сплит для этого:

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

Это говорит tar отправлять данные в stdout и разбивать, чтобы выбрать их из stdin - дополнительно с использованием числового суффикса ( -d), размера чанка ( -b) 100M и использования «tardisk» в качестве основы для результирующих имен файлов (tardisk00, tardisk01, tardisk02 и т. д.).

Чтобы извлечь данные впоследствии, вы можете использовать это:

cat tardisk* | tar xzpvf -
Эдуардо И.
источник
1
Небольшая коррекция, -dдля числового суффикса, а не префикса.
yclian
8

Конечно, лучший вариант - это --new-volume-scriptвариант.

Но, если вы знаете размер файла (в данном случае, largefile.tgz), то вы можете сделать это также:

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

Резюме:

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

(Для -L укажите столько, сколько необходимо, чтобы общая сумма файлов tar была больше, чем largefile.tgz)

Если вы пытаетесь tarсоздать структуру дерева каталогов

user1260486
источник
1

Я получил его для работы со следующими командами:

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

Единственная проблема заключается в том, part_1.tarчто на самом деле будет последний файл, а остальные сдвинуты на один. Т.е. part_2.tarна самом деле первая часть, и part_k.tarэто (n - 1)й часть. Исправить это с помощью некоторого сценария оболочки - тривиально и оставлено в качестве упражнения для читателя.

strupo
источник
1

он автоматически создаст файлы размером 1,1 ГБ. Если размер tar больше, вы можете увеличить это число, например, 1000 {2..1000} или увеличить входной аргумент до длины ленты.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
GraphicalDot
источник