Створіть архів дьогтю, розділений на блоки максимального розміру


83

Мені потрібно створити резервну копію досить великого каталогу, але я обмежений розміром окремих файлів. Я б хотів по суті створити tar.(gz|bz2)архів, який розділений на 200 МБ архівів. Clonezilla робить щось подібне до цього, розбиваючи резервні копії зображень так:

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

Чи є спосіб я це зробити за допомогою однієї команди? Я розумію, як використовувати splitкоманду, але мені хотілося б не створювати один гігантський архів, а потім розділяти його на менші архіви, оскільки це би подвоїло дисковий простір, який мені знадобиться для того, щоб спочатку створити архів.


Питання, пов’язані з цим: superuser.com/q/290986/11574
sampablokuper

Відповіді:


108

Ви можете передати tar на команду split:

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

У деяких * nix системах (як OS X) ви можете отримати таку помилку:

split: illegal option -- -

У такому випадку спробуйте це (зверніть увагу -b 200m):

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

Якщо ви намагаєтеся розділити файл, щоб він змістився на форматі FAT32, використовуйте обмеження в байті 4294967295. Наприклад:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
Чудово! Як я можу потім витягнути архів?
Naftuli Kay

24
Зробіть cat sda1.backup.tar.gz.* | tar xzvf -роботу?
Naftuli Kay

3
Так, слід. splitза замовчуванням встановлює імена файлів таким чином, що при сортування за LOCALE (що робиться за допомогою глобальної оболонки) буде в правильному порядку.
Йорданм

4
Без багатослівних, просто обійтися tar czf ...без vі злитися cat backup.tar.gz.* | tar tar xzf - без v. Я не бачу користі від багатослівного виводу тут v.
Лео Леопольд Герц 준영

1
Просто допоміг другові по упаковці Xcode на FAT32 відформатований флеш - диск з: tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz(використовується з cd /Applications/) Спасибі вам велике :)
ecth


4

Просто додати: Оскільки максимально дозволений розмір файлу в vfat / fat32 становить 2 ^ 32 мінус 1 (4294967295 байт), команда розділення з максимально дозволеним розміром файлу в такій файловій системі:

split -b4294967295 -d my_input_file my_output_file_splitted

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

Вам знадобиться сценарій для автоматизації переміщення файлу pseudo-tape.tar до нового імені:

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"

Я не відмовився від вашої відповіді, тому що я радий бачити цю, яка використовує -M --tape-length. Однак ця відповідь ігнорує запит ОП щодо рішення, яке використовує стиснення gzip або bzip2.
sampablokuper

Застереження: ви не говорите про, tarа про клон дьогтю, який називається gtar(GNU tar). Цей клон смоли підтримує створення багатотомних архівів, але з помітною ймовірністю не в змозі / не бажає витягувати з цих багатотомних архівів, оскільки він неправильно стверджує, що подальший том не є правильною частиною продовження.
schily
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.