Як створити архів дьогтю, розбитий на декілька файлів чи на них?


27

Згідно з цією сторінкою , можна дозволити tar створити архів дьогтю, який "розділиться" на 100 Мб файлів:

tar -c -M - довжина стрічки = 102400 --file = disk1.tar bigfile.tgz

Проблема полягає в тому, що ця команда вимагатиме від вас інтерактивного введення нового імені для наступного файлу після заповнення першого файлу.

Хтось знає про спосіб пропустити цей інтерактивний крок, і дозволити дьогтю зробити «розщеплення» автоматично?


Пов’язане з цим: unix.stackexchange.com/q/61774/6860
sampablokuper

Відповіді:


20

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


Це правда, звичайно.
Едуардо І.

2
Дякую, це те, що я шукав! Тепер я дізнався, що насправді є деякі інструкції (включаючи приклад), доступні тут: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa

Проблема в цьому полягає в тому, що вона надмірно втягує дурниці та рекламує протилежність правильним програмам у стилі 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варіант.

Але, якщо ви знаєте розмір файлу (у цьому випадку bigfile.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 була більшою, ніж bigfile.tgz)

Якщо ви намагаєтеся tarстворити структуру дерева каталогів


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)друга частина. Виправлення цього сценарію з оболонкою є тривіальним і залишається вправою для читача.


1

він автоматично створить файли розміром 1,1 Гб, якщо ваш тар більший за розміром, ви можете збільшити їх кількість, наприклад 1000 {2..1000} або ви можете збільшити вхід до аргументу довжини стрічки.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.