В некоторых случаях один файл нужно разбить на несколько частей, например, для более удобного хранения или для загрузки в случае слишком большого размера. Проще всего это сделать с помощью утилиты 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 – посмотреть версию утилиты.
В список включены не все опции. Чтобы посмотреть полную информацию, выполните в терминале команду:
man split
Как разбить файл на части Linux
Теперь перейдем к практической части статьи и на конкретных примерах посмотрим, как используется команда split Linux для разбивания файлов по размеру, по количеству строк и на заданное количество частей. Заодно мы упомянем нюансы выбора имени для частей файла.
1. Разбить по размеру
В данном случае поможет опция -b, определяющая максимальный размер конечного файла. За основу возьмем архив в 5.3 Мб, который находится по пути ~/Archives/archive.tar.gz. Его нужно разбить на несколько файлов по 1 Мб, например, чтобы потом переслать по почте. Для удобства зададим ему префикс имени split-archive.part_, а после нижнего подчеркивания будет идти суффикс, обозначающий номер конечного файла. Команда выглядит следующим образом:
split -b 10M ~/Archives/archive.tar.gz ~/Archives/split-archive.part_
Вот как будет выглядеть конечная папка:
Помимо самого архива, в ней есть еще 6 файлов. Вы можете пропустить ввод конечного местоположения и префикса. Тогда файлы автоматически создадутся в текущей папке.
2. Разбить по количеству строк
Иногда нужно разбить один текстовый документ на несколько, например, с количеством строк не больше установленного числа. В этом вопросе полезной окажется опция -l. Команда для разбития будет выглядеть следующим образом:
split -l 1000 ~/Logs/log ~/Logs/Split/divided-log_
Возьмем большой log-файл с данными на 219 тысяч строк. Для более удобной работы его нужно разбить на документы по 10 тысяч строк в каждом и поместить во вложенный каталог.
Результат выглядит так:
3. Разбить на определённое количество файлов
Еще одна достаточно интересная задача, в решении которой поможет опция -n. Достаточно прописать для неё итоговое количество файлов и запустить команду:
split -n 3 ~/Archives/archive.tar.gz ~/Archives/archive/split-archive.part_
Вот как это выглядит для рассмотренного ранее архива:
Если вы хотите разбить файл на несколько частей, не разделяя строки/записи внутри него, то понадобится модификатор l. Например, для того чтобы разбить файл на три части выполните такую команду:
split -n l/3 ~/Logs/Log ~/Logs/Split/divided-log_
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_
Как объединить части файла
Теперь вы знаете как разбить файл на части в Linux с помощью команды split. Следующий шаг – объединение нескольких частей в единый файл. Для этих целей отлично подойдет утилита cat. Сначала нужно задать имена самых частей, а потом итоговый файл:
$ cat /путь/к/1/части /путь/ко/2/части … > /местоположение/объединенного/файла
Поскольку все части имеют схожее имя, и различается только суффикс, можно упростить команду до такого вида:
cat ~/Archive/split-archive.part_* > ~/Archives/cat-archive.tar.gz
Рассмотрим объединение ранее разбитого на части архива.
Выводы
Утилита split в некоторых ситуациях окажется очень полезной. Она позволяет разбить один большой файл на несколько маленьких, указав при этом определенные критерии разделения. Мы рассмотрели несколько популярных сценариев для её использования. Но на деле их гораздо больше. Разбитый файл можно объединить, например, с помощью утилиты cat. Мы упомянули ее ближе к концу статьи.
Ну наконец-то нормальная статья!
Фраза "после нижнего подчеркивания" - невыносимо отвратительна. Примерно, как "в декабре месяце".
Верхнего подчёркивания не бывает в природе. Поэтому просто "после подчёркивания".
Что-то Ctrl+Enter не срабатывает...
Пара несущественных опечаток:
-n, --number – разбить файл на чаНКи (указанное количество частей). -
(вероятно, "части", хотя чанки мне нравится больше))
split -b 10M ~/Archives/archive.tar.gz ~/Archives/split-archive.part_ -
в примере 1Мб
А так, статья хорошая, спасибо, не знал о команде.