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

awk решение замечено на #bash (Freenode):

awk '!seen[$0]++' filename
87
18.01.2013, 21:11
7 ответов

Можно передать tar по каналу к команде разделения:

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

На некоторых *отклоняют системы (как 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.
114
27.01.2020, 19:30
  • 1
    Здорово!, Как я могу затем извлечь архив? –  Naftuli Kay 18.01.2013, 21:42
  • 2
    Будет cat sda1.backup.tar.gz.* | tar xzvf - задание? –  Naftuli Kay 18.01.2013, 21:45
  • 3
    Да, это должно. split значением по умолчанию определяет имена файлы так, чтобы при сортировке по ЛОКАЛЬЮ (который сделан оболочкой globbing) был в правильном порядке. –  jordanm 18.01.2013, 21:47
  • 4
    Без подробного, просто сделайте tar czf ... без v и слияние cat backup.tar.gz.* | tar tar xzf - без v. Я не вижу преимущества подробного вывода здесь v. –  Léo Léopold Hertz 준영 09.07.2016, 15:15
  • 5
    Просто помогший друг путем упаковки XCode на FAT32 отформатировал флеш-накопитель с: tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz (используемый от cd /Applications/) Большое спасибо :) –  ecth 08.12.2017, 14:06
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"
3
27.01.2020, 19:30
  • 1
    у меня нет downvoted Ваш ответ, потому что я рад видеть тот, который использует -M --tape-length. Однако этот ответ действительно игнорирует запрос OP на решение, которое использует gzip или bzip2 сжатие. –  sampablokuper 15.03.2018, 15:28

В macOS команда split работает несколько иначе:

$ tar cvzf - foo | split -b 2500m - foo.tgz.
13
27.01.2020, 19:30

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

split -b4294967295 -d my_input_file my_output_file_splitted
4
20.08.2021, 13:17

В дополнение к своему собственному вкладу я недавно написал приложение, которое разбивает tar-архивы по границам файлов, которое может оказаться полезным для вас:

https://github.com/dmuth/tarsplit

1
20.08.2021, 13:17

Вместо tar я бы использовал 7zip или какой-нибудь другой архиватор, который может нативно разбивать архив по границам файлов.

С помощью команды split у вас могут быть рубли на восстановление неисправных архивов, когда повреждена только одна часть серии.

7z и некоторые другие архивы дополнительно могут создавать сумму восстановления, добавленную к архивам, или даже иметь возможность добавить объем восстановления, который спасет вас, когда вы потеряете или повредите всю часть.

0
20.08.2021, 13:17

tarразделенный архив

Я нашел это лучшим решением по нескольким причинам:

  • Он создает детали без взаимодействия, автоматически называя их
  • Вы можете использовать любое сжатие, которое хотите, обычные tarопции
  • Не требует никаких внешних команд для разделения или объединения
  • Не использует дополнительное место на диске (промежуточный)
  • Любой разархиватор легко обрабатывается, так как каждый архив самодостаточен -
  • Повышение безопасности, так как каждый архив является самодостаточным -, файлы не охватывают несколько архивов

Эта команда создает фрагменты размером 2 ГБ без сжатия:

tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3
  • c для создания
  • v для подробностей,просмотреть список файлов, добавленных в архив
  • --лента -длина размер фрагмента :можно добавить суффикс, если его опустить, подразумевается килобайт (, следовательно, 2 миллиона для 2 гигабайт)
  • --файл это место, где мы волшебным образом создаем имена для чанков :мы даем произвольно 50, но вы можете указать любое достаточно большое число, будут использоваться только те, которые необходимы
  • список файлов и каталогов для включения в архивы

Аналогично, эта команда создает фрагменты размером 1 ГБ со сжатием gzip :

.
tar -czv --tape-length=2097000 --file=my_archive-{0..50}.tar.gz file1 file2 dir3
4
04.11.2021, 07:50

Теги

Похожие вопросы