Продолжаю ваc знакомить с утилитами командной стоки Linux, которыми пользуюсь сам. На днях вспомнил про SPLIT. С её помощью можно делить файлы на части. Чаще всего это нужно для больших архивов, которые требуется разбиться на части перед передачей по интернету. Так проще передать большой файл.
Я не помню, чтобы мне приходилось когда-нибудь ставить split отдельно. Обычно она есть в стандартном системном наборе во всех дистрибутивах, с которыми приходится работать.
Конкретно я split использую, когда нужно отправить в S3 хранилище какой-то большой архив. Во многих инструкциях по S3 указывается, что большие файлы отправлять не рекомендуется. Под большими подразумевается что-то больше 2-3 Гигабайт. Так что такие файлы приходится разбивать.
В общем случае разбить файл с помощью split можно следующим образом:
# split -b 100M file
На выходе получим некоторый набор файлов в зависимости от размера исходного. Имена у файлов будут вида xaa, xab, xaс и т.д., что явно неудобно. Поэтому на практике лучше сразу указать маску, по которой будут создаваться новые файлы:
# split -b 2M file file_ -a 2 -d
Мы указали длину префикса 2 и использование чисел. На выходе будут файлы file_00, file_01, file_02 и т.д., что мне видится удобнее дефолтных масок.
Собрать файлы обратно можно следующим образом:
# cat file_* > file
Если вы просто хотите разделить файл на 5 частей вне зависимости от того, какого они будут размера, то делается это следующим образом:
# split -n 5 file file_ -a 2 -d
Вот пример использования split на бэкапе большого сайта для дальнейшей передачи его в S3. Пример условный, так как вынул его из большого скрипта и все переменные указал явно. То есть это не мой окончательный рабочий вариант, а адаптированный пример:
# Делаем архив с относительным путём внутри/usr/bin/tar --exclude='cache/*' \-czvf /mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz \-C /web/sites/site.ru www# Разбиваем архив на части/usr/bin/split -b 2048m \/mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz \"/mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz-part-"# Удаляем исходный файл/usr/bin/rm -rf /mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz# Заливаем в S3/usr/bin/rclone copy /mnt/backup s3storage:week# Чистим локальный бэкап от старых архивов/usr/bin/find /mnt/backup -type f -mtime +7 -exec rm {} \;
Отдельно отмечу, что подобные бэкапы обязательно нужно проверять. У меня S3 это не основной бэкап, а холодное хранилище для них. Эти же бэкапы хранятся где-то ещё, разворачиваются и проверяются, так как туда ещё и дамп базы обычно кладётся, чтобы всё в одном месте было.
#terminal #bash