Библиотека сайта 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