Команда Split применяется в Linux для разделения больших файлов на файлы меньшего размера. По умолчанию файлы разбиваются на 1000 строк в каждом.
Пользователь может изменять количество строк в соответствии с требованиями. Имена файлов: PREFIXaa, PREFIXab, PREFIXac и т. д.
Содержание
Синтаксис
$ split [options] filename [prefix]
Выводит части ФАЙЛА фиксированного размера в файлы ПРЕФИКСaa, ПРЕФИКСab, …; по умолчанию размер части равен 1000 строк, а ПРЕФИКС — x
.
Основные опции
- -b, --bytes=ЧИСЛО
- Записывать в выходной файл заданное ЧИСЛО байт
- -d
- Использовать числовые (начинающиеся с 0), а не буквенные суффиксы
- -l, --lines=ЧИСЛО
- Записывать в каждый выходной файл заданное ЧИСЛО строк
- -n, --number=ПОРЦИИ
- Генерировать выходные файлы по ПОРЦИЯМ (задать количество выводимых файлов)
- --verbose
- Печатать диагностику перед открытием очередного выходного файла
РАЗМЕР задаётся целым числом и необязательной единицей измерения (пример: 10K это 10*1024). Единицы измерения: K, M, G, T, P, E, Z, Y (степень 1024) или KB, MB, … (степень 1000). Также можно использовать двоичные префиксы: KiB=K, MiB=M и так далее.
ПОРЦИИ могут задаваться в следующем виде:
- N
- Разделить на N файлов, основываясь на размере входных данных
- K/N
- Вывести K-ую порцию из N на стандартный вывод
- l/N
- Разделить на N файлов без разделения строк/записей
- l/K/N
- Вывести K-ую порцию из N на стандартный вывод без разделения строк/записей
- r/N
- Как l, но использовать циклический перебор
- r/K/N
- Аналогично, но вывести только K-ую порцию из N на стандартный вывод
Установка
В базовую поставку известных мне дистрибутивов Linux split
включён и в установке не нуждается.
Примеры использования
Разделение исходного файла
Разделить файл на короткие файлы. Предположим, имя файла с именем puppy431_RU-m4.iso
. Используйте приведенную ниже команду разделения, чтобы разбить его на части.
oleg@mobile:~/store/distros/puppy:$ split puppy431_RU-m4.iso
Смотрим список файлов:
oleg@mobile:~/store/distros/puppy:$ ls -l
итого 507984
-rw-r--r-- 1 oleg users 259162112 апр 12 2013 puppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 309754 мая 26 16:40 xaa
-rw-r--r-- 1 oleg users 240393 мая 26 16:40 xab
-rw-r--r-- 1 oleg users 266687 мая 26 16:40 xac
...
-rw-r--r-- 1 oleg users 262423 мая 26 16:41 xzakr
-rw-r--r-- 1 oleg users 275433 мая 26 16:41 xzaks
-rw-r--r-- 1 oleg users 278122 мая 26 16:41 xzakt
-rw-r--r-- 1 oleg users 261773 мая 26 16:41 xzaku
Файл разделен на части с именами от xaa
до xzaku
. По умолчанию в каждом файле будет 1000 строк. Полученные файлы называются так потому, что мы не установили никакого значения префикса.
Разделить файл по количеству строк.
oleg@mobile:~/store/distros/puppy:$ split -l 100000 puppy431_RU-m4.iso
Файл puppy431_RU-m4.iso
разбит на фрагменты по 100000 строк. Использована опция -l
.
Разделить файл с подробным выводом. Мы будем использовать ту же опцию -l 100000
и получать сообщение при создании нового файла.
oleg@mobile:~/store/distros/puppy:$ split -l 100000 puppy431_RU-m4.iso --verbose
создаётся файл 'xaa'
создаётся файл 'xab'
создаётся файл 'xac'
создаётся файл 'xad'
создаётся файл 'xae'
создаётся файл 'xaf'
создаётся файл 'xag'
создаётся файл 'xah'
создаётся файл 'xai'
создаётся файл 'xaj'
Разделить файлы, созданные с числовым суффиксом. Как правило, выходные данные имеют формат x**
, где **
— буквы алфавита. Мы можем изменить суффикс файлов на числовой, используя опцию -d
.
oleg@mobile:~/store/distros/puppy:$ split -l 100000 -d puppy431_RU-m4.iso
Смотрим список файлов:
oleg@mobile:~/store/distros/puppy:$ ls -l
итого 506196
-rw-r--r-- 1 oleg users 259162112 апр 12 2013 puppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 27622457 мая 26 17:16 x00
-rw-r--r-- 1 oleg users 28058980 мая 26 17:16 x01
-rw-r--r-- 1 oleg users 27437930 мая 26 17:16 x02
-rw-r--r-- 1 oleg users 28756373 мая 26 17:16 x03
-rw-r--r-- 1 oleg users 27046983 мая 26 17:16 x04
-rw-r--r-- 1 oleg users 28558155 мая 26 17:16 x05
-rw-r--r-- 1 oleg users 28045790 мая 26 17:16 x06
-rw-r--r-- 1 oleg users 27999732 мая 26 17:16 x07
-rw-r--r-- 1 oleg users 27317413 мая 26 17:16 x08
-rw-r--r-- 1 oleg users 8318299 мая 26 17:16 x09
Создание n фрагментов выходных файлов. Если мы хотим разделить файл на три выходных файла фрагмента, то следует использовать параметр -n
, ограничивающий количество выходных файлов.
oleg@mobile:~/store/distros/puppy:$ split -n 3 puppy431_RU-m4.iso
Смотрим список файлов:
oleg@mobile:~/store/distros/puppy:$ ls -l
итого 506180
-rw-r--r-- 1 oleg users 259162112 апр 12 2013 puppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xaa
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xab
-rw-r--r-- 1 oleg users 86387372 мая 26 17:20 xac
Были созданы три фрагмента.
Следует избегать создания фрагментов нулевого размера, которые могут возникнуть при разбиении небольшого файла на большое количество фрагментов. Для того чтобы избежать этого, используется опция -e
.
$ split -e file.txt
Восстановление исходного файла
Для восстановления будем использовать команду cat
— сокращение от конкатенации, то есть объединения элементов вместе. Так как все файлы начинаются с буквы х
, то звездочка *
будет применять команду ко всем файлам, названия которых начинаются с этой буквы.
oleg@mobile:~/store/distros/puppy:$ ls -l
итого 506180
-rw-r--r-- 1 oleg users 259162112 апр 12 2013 puppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xaa
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xab
-rw-r--r-- 1 oleg users 86387372 мая 26 17:20 xac
oleg@mobile:~/store/distros/puppy:$ cat x* > recoveredpuppy431_RU-m4.iso
Смотрим список файлов:
oleg@mobile:~/store/distros/puppy:$ ls -l
итого 759268
-rw-r--r-- 1 oleg users 259162112 апр 12 2013 puppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 259162112 мая 26 17:28 recoveredpuppy431_RU-m4.iso
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xaa
-rw-r--r-- 1 oleg users 86387370 мая 26 17:20 xab
-rw-r--r-- 1 oleg users 86387372 мая 26 17:20 xac
Изначальный файл и восстановленный файл абсолютно идентичны.
Заключение
В статье были показаны основные примеры работы с командой split
в Linux. Начинающим пользователям Linux знание её и умение ей пользоваться будут очень полезны.