Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Изучаем команды linux: split

Оригинал: Learning Linux Commands: split
Автор: Lubos Rendek
Дата публикации: 17 января 2013 года
Перевод: А. Кривошей
Дата перевода: март 2013 г.

1. Введение

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

2. Часто используемые опции

-b, --bytes=SIZE
Эта опция задает размер выводимых файлов.
-d, --numeric-suffixes
использовать цифровые суффиксы вместо алфавитных
-n, --number=CHUNKS
задает количество выводимых файлов

3. Разрезание файла на части заданного размера

Если не используется опция suffix, по умолчанию команда split будет разделять файлы на части, название которых будет начинаться с x, за которым будут следовать еще два символа в алфавитном порядке. Например, первый файл будет называться xaa, за которым будет идти xab, xac, а последний файл будет называться xzz. Это значит, что в данном случае вы можете разбить свой файл не более чем на 676 частей (26x26). Возьмем для примера файл размером 10 Мб:

$ dd if=/dev/zero of=file bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0780163 s, 134 MB/s
$ ls -lh file
-rw-rw-r-- 1 split-example split-example 10M Jan 17 15:24 file

Теперь мы можем разбить этот файл на части размером 1 Мб с помощью опции -b:

$ split -b 1M file
$ ls -lh
total 21M
-rw-rw-r-- 1 split-example split-example  10M Jan 17 15:24 file
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xaa
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xab
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xac
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xad
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xae
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xaf
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xag
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xah
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xai
-rw-rw-r-- 1 split-example split-example 1.0M Jan 17 15:26 xaj

4. Разрезание файла на заданное количество частей

Также может возникнуть ситуация, когда нам нужно разбить файл на определенное количество частей. В приведенном ниже примере мы разрезаем наш файл размером 10 Мб на максимум три части с помощью опции -n:

$ ls -lh file
-rw-rw-r-- 1 split-example split-example 10M Jan 17 15:24 file
$ split -n 3 file
$ ls -lh *
-rw-rw-r-- 1 split-example split-example  10M Jan 17 15:24 file
-rw-rw-r-- 1 split-example split-example 3.4M Jan 17 15:33 xaa
-rw-rw-r-- 1 split-example split-example 3.4M Jan 17 15:33 xab
-rw-rw-r-- 1 split-example split-example 3.4M Jan 17 15:33 xac

5. Использование числовых суффиксов

Команда split позволяет создавать файлы с числовыми суффиксами вместо символьных. Приведенная ниже команда создает файл для каждого символа в строке "linuxcareer.com". Секрет заключается в том, что мы разрезаем файл, задавая размер части в байтах, а 1 байт эквивалентен 1 символу. Также вместо символьных мы используем числовые суффиксы:

$ ls
$ echo linuxcareer.com | split -b 1 -d
$ ls
x00  x01  x02  x03  x04  x05  x06  x07  x08  x09  x10  x11  x12  x13  x14  x15
$ cat *
linuxcareer.com

6. Восстановление исходного файла

Разрезать файл легко, но как собрать его обратно? Допустим, у нас есть какой-либо ISO-образ, и мы хотим разделить его пополам.

$ ls -lh ubuntu-12.04.1-server-amd64.iso 
-rw-r--r-- 1 split-example split-example 658M Jan 17 15:45 ubuntu-12.04.1-server-amd64.iso

Теперь мы разрезаем образ пополам с помощью опции -n:

$ split -n 2 ubuntu-12.04.1-server-amd64.iso
$ ls -lh x*
-rw-rw-r-- 1 split-example split-example 329M Jan 17 15:51 xaa
-rw-rw-r-- 1 split-example split-example 329M Jan 17 15:51 xab

Мы можем восстановить исходный файл ubuntu-12.04.1-server-amd64.iso, используя команду cat и оператор перенаправления STDOUT:

$ cat x* > restored-ubuntu-12.04.1-server-amd64.iso

Чтобы убедиться, что файл restored-ubuntu-12.04.1-server-amd64.iso восстановлен корректно и представляет собой точную копию оригинального файла ubuntu-12.04.1-server-amd64.iso, мы используем команду md5sum для создания контрольной суммы обоих файлов:

$ md5sum *.iso
a8c667e871f48f3a662f3fbf1c3ddb17  restored-ubuntu-12.04.1-server-amd64.iso
a8c667e871f48f3a662f3fbf1c3ddb17  ubuntu-12.04.1-server-amd64.iso

Как вы можете видеть, восстановленный файл является точной копией исходного, так как их контрольные суммы совпадают.

7. Разрезание архивов tar на лету

Теперь, когда мы ознакомились с основами, рассмотрим более сложный пример.
В приведенном ниже примере мы архивируем директорию /tmp/Software. Однако вместо создания архива мы разрежем его на лету с помощью команды split.

$ du -sh /tmp/Software 
29M     /tmp/Software
$ ls
$ tar cz /tmp/Software | split -b 2M
tar: Removing leading `/' from member names
$ ls
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj  xak  xal  xam  xan

Как вы можете видеть, наш архив диретории /tmp/Software разрезан на части с максимальным размером 2 Мб. Далее мы восстановим исходную директорию:

$ cat * | tar xz 
$ ls
tmp  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj  xak  xal  xam  xan
$ du -sh tmp/Software 
29M     tmp/Software

8. Заключение

Как вы можете видеть, при использовании операционной системы GNU/Linux вы ограничены только своим воображением и навыками, а не размером вашего кошелька. В данной статье описаны только основы работы с командой split. Узнать больше вы можете с помощью команды:

$ man split