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

UnixForum





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

Как разрезать и соединять файлы в командной строке Linux

Оригинал: How To Split And Combine Files From Command Line In Linux
Автор: SK
Дата публикации: 2 мая 2017 года
Перевод: А. Кривошей
Дата перевода: сентябрь 2017 г.

На моем ноутбуке хранится множество обучающих видео по Linux. Я хотел бы загрузить их все на Google Drive, чтобы иметь резервные копии. Проблема в том, что эти видеоролики размером более 1 гигабайта, что плохо подходит для загрузки на диск Google. Несмотря на то, что Google Drive поддерживает загрузку файлов размером до 5 Тб, на практике для загрузки больших файлов требуется слишком много времени. Рассматривая эту проблему, я понял, что было бы намного лучше, если бы я мог разделить эти файлы на меньший размер и загружать их по одному. Затем я могу загрузить все части файла и объединить их все, когда захочу. Есть простая утилита командной строки, называемая «split», которая используется для разделения больших файлов на несколько файлов меньшего размера, и вы можете позже соединить все эти части в один файл.

В этом кратком руководстве я покажу вам, как разрезать и соединять файлы в командной строке Unix-подобных операционных систем.

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

Давайте посмотрим на размер этого видеоролика.

$ du -h Linux\ Security.mp4

1.1G Linux Security.mp4

Как вы можете видеть, размер видео 1,1 Гб, что очень много для загрузки на мой диск google. С моей скоростью интернет-соединения это займет более 30 минут. Я не хочу ждать так долго. Поэтому я хочу разделить файл на несколько частей, например по 100 Мб, чтобы потом быстро загрузить их одну за одной.

Для этого используем команду:

$ split -b 100M Linux\ Security.mp4 ls.

Команда создаст файлы ls.aa, ls.ab, ls.ac.. и так далее, размером по 100 Мб.

Посмотрим, что теперь у нас в директории:

$ ls

'Linux Security.mp4' ls.ab ls.ad ls.af ls.ah ls.aj
 ls.aa ls.ac ls.ae ls.ag ls.ai ls.ak

Файл Linux Security.mp4 разрезан на части с именами ls.aa, ls.ab …. ls.ak, каждая по 100 Мб.
Теперь намного проще отправить их в качестве вложения в электронное письмо.

Объединение файлов в командной строке

Перейдем в директорию, где лежат все части нашего файла и объединим их в один файл.

$ cat ls.?? > Linux_security.mp4

Здесь Linux_security.mp4 - имя собираемого файла. Два знака вопроса (??) означают искать в имени файла любое расширение из двух символов. Для упрощения часть имени ls.?? соответствует всем названиям файлов ls.aa, ls.ab ..., которые объединяются в один файл.
Не забудьте указать правильное расширение при объединении частей. В случае, если вы хотите отправить все файлы по почте своему другу, сообщите ему правильное расширение файлов, которые вы отправили. Он должен использовать одно и то же расширение файла в выходном файле при их объединении.
Если вы не укажете в команде split никаких аргументов, файл будет разбит на несколько частей с именами вида x **. По умолчанию каждый файл будет содержать 1000 строк. Здесь ** - это двухсимвольный суффикс, который по умолчанию добавляется к каждому имени файла.

Разделим тот же файл с помощью команды split без указания каких-либо аргументов, как показано ниже.

$ split Linux\ Security.mp4

Эта команда разрежет файл Linux Security.mp4 на множество файлов с именами вида x**.

$ ls

Linux Security.mp4 xaj xat xbd xbn xbx xch xcr xdb xdl xdv xef xep xez xfj
xaa xak xau xbe xbo xby xci xcs xdc xdm xdw xeg xeq xfa xfk
xab xal xav xbf xbp xbz xcj xct xdd xdn xdx xeh xer xfb xfl
xac xam xaw xbg xbq xca xck xcu xde xdo xdy xei xes xfc xfm
xad xan xax xbh xbr xcb xcl xcv xdf xdp xdz xej xet xfd
xae xao xay xbi xbs xcc xcm xcw xdg xdq xea xek xeu xfe
xaf xap xaz xbj xbt xcd xcn xcx xdh xdr xeb xel xev xff
xag xaq xba xbk xbu xce xco xcy xdi xds xec xem xew xfg
xah xar xbb xbl xbv xcf xcp xcz xdj xdt xed xen xex xfh
xai xas xbc xbm xbw xcg xcq xda xdk xdu xee xeo xey xfi

Каждый файл содержит 1000 строк. Вы можете убедиться в этом с помощью команды wc (word count):

$ wc -l 

142891 Linux Security.mp4
 1000 xaa
 1000 xab
 1000 xac
 1000 xad
 1000 xae
 1000 xaf
 1000 xag
 1000 xah
 .
 .
 .
 1000 xfl
 891 xfm
 285782 total

Объединить все эти части в один файл можно с помощью команды:

$ cat x* > ls.mp4

Приведенная выше команда объединит все файлы в один с именем ls.mp4.

Заключение

Конечно, имеется множество утилит, как консольных, так и графических, которые позволяют разрезать и объединять файлы в Linux. Однако "split" - это встроенная команда, которая входит в состав ядра Linux. Поэтому вам не понадобится устаналивать никаких дополнительных программ. К тому же эта команда работает очень быстро.

Немного подробнее о команде split вы можете узнать из следующей статьи: "Изучаем команды linux: split"