Linux tar split archive

How to create tar archive split into, or spanning, multiple files?

The problem is that this command will require you to interactively give a new filename for the next file, after the first file is filled. Anybody knows of a way to skip this interactive step, and let tar do the «splitting» automatically?

7 Answers 7

Take a look at the —new-volume-script option, which lets you replace the prompting mechanism with a different mechanism or with a generated filename. ( (tar.info)Multi-Volume Archives in the tar info page.) The problem with split is that you need to cat the pieces back together to do anything, whereas a multivolume archive should be a bit more flexible.

Thanks, this is what I was looking for! I now found out that there is actually some instructions (incl. example) available here: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes

The problem with this is that it’s overly involved nonsense and promotes the opposite of proper Unix style apps.

You can use split for this:

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

This tells tar to send the data to stdout, and split to pick it from stdin — additionally using a numeric suffix ( -d ), a chunk size ( -b ) of 100M and using ‘tardisk’ as the base for the resulting filenames (tardisk00, tardisk01, tardisk02, etc.).

To extract the data afterwards you can use this:

Of course the best option to use is the —new-volume-script option.

But, if you know the size of the file (in this case, largefile.tgz), then you can do this also:

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 . ) 

(For the -L, specify as many as needed so that the total sum of the tar files is larger than largefile.tgz)

If you are trying to tar a directory tree structure

it will automatically create files of size 1.1GB, if your tar is bigger in size, you can increase the number, for an example 1000 or you can increase the input to tape-length argument.

tar --tape-length=1048576 -cMv --file=tar_archive.> backup.tar.lzma 

I’ve answered here with the better explanation here tar split archive

This command is creating 2GB chunks without the compression:

tar -cv --tape-length=2097000 --file=my_archive-.tar file1 file2 dir3 

The easiest non-interactive way would be —

Creating multipart tar from a large file (say bigfile)

$ tar cvf small.tar -L1024 -F 'echo small.tar-$ >&$' bigfile 

Extracting multipart tar to a specific directory (say /output/dir)

$ tar xvf small.tar -F 'echo small.tar-$ >&$' -C /output/dir 

You are free to select any supported compression format, block size (1024K here) and archive name (which is small.tar here).

Читайте также:  Создать резервную копию linux mint

I got it to work with the following commands:

mkdir -p ./split rm -rf ./split/* tar -cML 102400 -F 'cp "$" \ ./split/part_$.tar' \ -f split/part_1.tar large_file.tar.gz 

The only problem is that part_1.tar will actually be the last file, and the others are shifted by one. I.e. part_2.tar is actually the first part, and part_k.tar is the (n — 1) th part. Fixing this with some shell script is trivial, and left as an exercise for the reader.

Источник

Как разбить файл на части Linux

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

В данной статье мы расскажем о том, как работает команда split Linux. А затем разберемся с конкретными сценариями использования, например, как разбить файл на части Linux по определенным критериям. А затем рассмотрим как объединить обратно получившиеся части.

Синтаксис и опции split

Данная команда разбивает один большой файл на несколько маленьких. У неё достаточно понятный синтаксис. Для запуска следует указать опции, путь к большому файлу и путь создания новых файлов с общим префиксом имени:

$ split опции /местоположение/исходного/файла /путь/к/конечной/папке/префикс_имени

  • -a, —suffix-length – задать длину суффикса (количество символов) в имени части файла. По умолчанию это 2 символа.
  • —additional-suffix – указать дополнительный суффикс.
  • -b, —bytes – разбить файл на части равного указанного размера. Единица измерения – 1 байт, 1000 байт записывается как KB, 1024 как K. По аналогии есть MB (M), GB (G) и так далее.
  • -C, —line-bytes – разбить файл на части не более указанного размера, не разделяя строки/записи внутри него.
  • -d – использовать числовой суффикс в имени конечного файла вместо алфавитного. Отсчет начинается с нуля.
  • —numeric-suffixes – то же самое, что и -d, но еще задаётся начальное число для отсчета.
  • -x – использовать hex-префикс вместо алфавитного. Начальное значение – 0.
  • —hex-suffixes – то же самое, что и -x, но начальное значение задаётся вручную.
  • -e, —elide-empty-files – не создавать пустые файлы при выполнении опции -n.
  • -l, —lines – установить максимальное количество строк/записей итогового файла. По умолчанию команда split разбивает файл на 1000 строк.
  • -n, —number – разбить файл на чанки (указанное количество частей).
  • -t, —separator – установить свой разделительный символ вместо новой строки.
  • —verbose – выводить информацию о новых файлах перед их созданием.
  • —version – посмотреть версию утилиты.

В список включены не все опции. Чтобы посмотреть полную информацию, выполните в терминале команду:

Как разбить файл на части Linux

Теперь перейдем к практической части статьи и на конкретных примерах посмотрим, как используется команда split Linux для разбивания файлов по размеру, по количеству строк и на заданное количество частей. Заодно мы упомянем нюансы выбора имени для частей файла.

1. Разбить по размеру

В данном случае поможет опция -b, определяющая максимальный размер конечного файла. За основу возьмем архив в 5.3 Мб, который находится по пути ~/Archives/archive.tar.gz. Его нужно разбить на несколько файлов по 1 Мб, например, чтобы потом переслать по почте. Для удобства зададим ему префикс имени split-archive.part_, а после нижнего подчеркивания будет идти суффикс, обозначающий номер конечного файла. Команда выглядит следующим образом:

Читайте также:  Отличия linux между собой

split -b 10M ~/Archives/archive.tar.gz ~/Archives/split-archive.part_

JBN7AAAAAElFTkSuQmCC

Вот как будет выглядеть конечная папка:

A67xrZIC8ptGAAAAAElFTkSuQmCC

Помимо самого архива, в ней есть еще 6 файлов. Вы можете пропустить ввод конечного местоположения и префикса. Тогда файлы автоматически создадутся в текущей папке.

2. Разбить по количеству строк

Иногда нужно разбить один текстовый документ на несколько, например, с количеством строк не больше установленного числа. В этом вопросе полезной окажется опция -l. Команда для разбития будет выглядеть следующим образом:

split -l 1000 ~/Logs/log ~/Logs/Split/divided-log_

Возьмем большой log-файл с данными на 219 тысяч строк. Для более удобной работы его нужно разбить на документы по 10 тысяч строк в каждом и поместить во вложенный каталог.

Еще одна достаточно интересная задача, в решении которой поможет опция -n. Достаточно прописать для неё итоговое количество файлов и запустить команду:

split -n 3 ~/Archives/archive.tar.gz ~/Archives/archive/split-archive.part_

Вот как это выглядит для рассмотренного ранее архива:

HQAAAABJRU5ErkJggg==

Если вы хотите разбить файл на несколько частей, не разделяя строки/записи внутри него, то понадобится модификатор l. Например, для того чтобы разбить файл на три части выполните такую команду:

split -n l/3 ~/Logs/Log ~/Logs/Split/divided-log_

O4E6q9AzDCL3PpT52x6cdmTuq2jUnwFDI7fCr7b9fr26Fyre8Hzi5BcybA83Zd4+2Hn1r+CzDa9tJHZI6vAAAAAElFTkSuQmCC

4. Настройка имени частей файла

Как мы уже писали ранее, для команды split префикс определяет название части файла. А после него по умолчанию идет суффикс из двух латинских букв. С помощью дополнительных опций можно изменить его длину (опция -a), переключиться на числа (опция -d) или hex-символы (опция -x). В последних двух сценариях получится выбрать начальную точку отчета (опция —numeric-suffixes для чисел и —hex-suffixes для hex-символов).

Возьмем такую задачу – разделить текстовый документ на 3 файла равного размера, чтобы каждый из них имел префикс split-text.part_ и числовой суффикс из одного символа, начиная с единицы:

split -a 1 —numeric-suffixes=1 -n 3 ~/Docs/text ~/Docs/Split/split-text.part_

wME0Yt4zcpd1QAAAABJRU5ErkJggg==

Как объединить части файла

Теперь вы знаете как разбить файл на части в Linux с помощью команды split. Следующий шаг – объединение нескольких частей в единый файл. Для этих целей отлично подойдет утилита cat. Сначала нужно задать имена самых частей, а потом итоговый файл:

$ cat /путь/к/1/части /путь/ко/2/части … > /местоположение/объединенного/файла

Поскольку все части имеют схожее имя, и различается только суффикс, можно упростить команду до такого вида:

cat ~/Archive/split-archive.part_* > ~/Archives/cat-archive.tar.gz

Рассмотрим объединение ранее разбитого на части архива.

i0XekR0vyxgAAAABJRU5ErkJggg==

Выводы

Утилита split в некоторых ситуациях окажется очень полезной. Она позволяет разбить один большой файл на несколько маленьких, указав при этом определенные критерии разделения. Мы рассмотрели несколько популярных сценариев для её использования. Но на деле их гораздо больше. Разбитый файл можно объединить, например, с помощью утилиты cat. Мы упомянули ее ближе к концу статьи.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

How to Split Large ‘tar’ Archive into Multiple Files of Certain Size

Are you worried of transferring or uploading large files over a network, then worry no more, because you can move your files in bits to deal with slow network speeds by splitting them into blocks of a given size.

In this how-to guide, we shall briefly explore the creation of archive files and splitting them into blocks of a selected size. We shall use tar , one of the most popular archiving utilities on Linux and also take advantage of the split utility to help us break our archive files into small bits.

Читайте также:  Удаление пароля linux mint

Create and Split tar into Multiple Files or Parts in Linux

Before we move further, let us take note of, how these utilities can be used, the general syntax of a tar and split command is as follows:

# tar options archive-name files # split options file "prefix”

Let us now delve into a few examples to illustrate the main concept of this article.

Example 1: We can first of all create an archive file as follows:

$ tar -cvjf home.tar.bz2 /home/aaronkilik/Documents/*

Create Tar Archive File

To confirm that out archive file has been created and also check its size, we can use ls command:

Then using the split utility, we can break the home.tar.bz2 archive file into small blocks each of size 10MB as follows:

$ split -b 10M home.tar.bz2 "home.tar.bz2.part" $ ls -lh home.tar.bz2.parta*

Split Tar File into Parts in Linux

As you can see from the output of the commands above, the tar archive file has been split to four parts.

Note: In the split command above, the option -b is used to specify the size of each block and the «home.tar.bz2.part» is the prefix in the name of each block file created after splitting.

Example 2: Similar to the case above, here, we can create an archive file of a Linux Mint ISO image file.

$ tar -cvzf linux-mint-18.tar.gz linuxmint-18-cinnamon-64bit.iso

Then follow the same steps in example 1 above to split the archive file into small bits of size 200MB .

$ ls -lh linux-mint-18.tar.gz $ split -b 200M linux-mint-18.tar.gz "ISO-archive.part" $ ls -lh ISO-archive.parta*

Split Tar Archive File to Fixed Sizes

Example 3: In this instance, we can use a pipe to connect the output of the tar command to split as follows:

$ tar -cvzf - wget/* | split -b 150M - "downloads-part"

Create and Split Tar Archive File into Parts

Check Parts of Tar Files

In this last example, we do not have to specify an archive name as you have noticed, simply use a — sign.

How to Join Tar Files After Splitting

After successfully splitting tar files or any large file in Linux, you can join the files using the cat command. Employing cat is the most efficient and reliable method of performing a joining operation.

To join back all the blocks or tar files, we issue the command below:

# cat home.tar.bz2.parta* >backup.tar.gz.joined

We can see that after running the cat command, it combines all the small blocks we had earlier on created to the original tar archive file of the same size.

Conclusion

The whole idea is simple, as we have illustrated above, you simply need to know and understand how to use the various options of tar and split utilities.

You can refer to their manual entry pages of to learn more other options and perform some complex operations or you can go through the following article to learn more about tar command.

For any questions or further tips, you can share your thoughts via the comment section below.

Источник

Оцените статью
Adblock
detector