Если имеется большой файл, который необходимо переместить на другой компьютер через Flash-ку маленьких размеров, или нужно отправить файл по почте небольшими кусками, то пользователь ОС должен уметь разбивать файл на части и соединять их обратно.
В современном мире разумно использовать два подхода:
- Упаковать файл архиватором, умеющим генерировать архивы с разбивкой на части
- Воспользоваться системными утилитами для разбивки и склеивания файлов
Первый подход имеет смысл использовать тогда, когда принимающая сторона не обладает достаточной квалификацией чтобы выполнять какие-то действия в консоли. Действительно, проще упаковать файл архиватором RAR или 7z с указанием разбивки на части. Тогда можно быть уверенным, что пользователь, получивший такие файлы-куски, сможет их распаковать общепринятыми способами.
Второй подход - это использование системных утилит ОС Linux, которые традиционно входят в базовую поставку любого современного дистрибутива.
Разбивка файла на части
Для разбивки файла на части, в ОС Linux имеется программа split за авторством Ричарда нашего М. Столлмана. Общий синтаксис у нее такой:
split как_разбить разбиваемый_файл префикс_имени_для_кусочков
Чтобы указать, как файл необходимо разбивать, используются следующие опции:
-b (она же --byte) - разбить файл на части указанного размера. Единица измерения 1 байт. В значении размера можно пользоваться буквами K, M, G. Например, опция -b 500K означает разбить файл на части по 500 килобайт.
-n (она же --number) - разбить файл на указанное число кусков.
-l (она же --lines) - используется для текстовых файлов. Файл разбивается на части, содержащие указанное количество строк.
Помимо опций разбивки файла, имеются и другие опции, которые можно посмотреть через команду man split. Однако самые часто используемые такие:
-d (от слова digit) - формировать имена частей с использованием чисел. Дело в том, что по умолчанию команда split будет добавлять к частям не номера частей, а следующие символы: aa, ab, ac и т. д. Это не очень удобно, и опция -d помогает увидеть привычную нумерацию частей.
-a - длинна нумерации итоговых файлов. По умолчанию установлено значение 2. Но если количество частей превысит значение zz (для символов) или 100 (для чисел), то можно указать -a 3 или еще большее число.
Примеры разбивки файла
Пример 1:
# Разбить файл на части размером 10 мегабайт
split -b 10M archive.tar.gz archive_split_part_
Результат:
archive_split_part_aa
archive_split_part_ab
archive_split_part_ac
Пример 2:
# Разбить файл на 5 частей
split -n 5 archive.tar.gz archive_split_part_
Результат:
archive_split_part_aa
archive_split_part_ab
archive_split_part_ac
archive_split_part_ad
archive_split_part_ae
Пример 3:
# Разбить файл на 5 частей с числовой нумерацией
split -n 5 -d archive.tar.gz archive_split_part_
Результат:
archive_split_part_00
archive_split_part_01
archive_split_part_02
archive_split_part_03
archive_split_part_04
Объединение файла из частей
Для объединения частей файла в один используется стандартная утилита cat. Общий синтаксис следующий:
cat файл_первого_куска файл_второго_куска файл_N_го_куска > итоговый_файл
Так как имена объединяемых файлов обычно имеют неизменяемый префикс и изменямый постфикс, можно указать сразу все склеиваемые файлы, например:
cat файл_* > итоговый_файл
В итоге получится единый исходный файл, который ранее был разбит на куски.