20

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

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

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

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

4 ответа4

29

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

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

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

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

cat tardisk* | tar xzpvf -
19

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

7

Конечно, лучше всего использовать параметр --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 структуру дерева каталогов

0

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

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) частью. Исправить это с помощью некоторого сценария оболочки - тривиально и оставлено в качестве упражнения для читателя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .