Как разбить большие файлы на более мелкие части?

189

У меня есть большой файл (8 ГБ для примера). Как я могу разделить его на несколько частей, скажем, 3 равные части, и после этого, как я могу интегрировать их позже?

karthick87
источник
Похоже, это дубликат askubuntu.com/questions/12172/…
Джо-Эрленд Шинстад
Вы уверены, что "Это, кажется,"? Черт, это точно так же. Кроме вот теперь с бонусом «Больше примеров и альтернатив».
Луис Альварадо
Это может помочь, если вы расскажете больше о том, почему вы хотите разделить его, и хотите ли вы разделить его только на байтовые подстроки или вы открыты, чтобы обернуть их в любой вид проверки ошибок или маркировки. Если это поместить его на носитель меньшего размера или для передачи по сети, я бы посмотрел что-то вроде par2 .
пул
перекрестная ссылка: stackoverflow.com/questions/7764755/…
Тревор Бойд Смит
один лайнер для одинакового деления на N: (1.) деление на строки деление - строки $ (($ (wc -l <$ {your_filename}) / $ {N})) $ {your_filename} (2.) деление на разделение байтов - байты $ (($ (wc -c <$ {your_filename}) / $ {N})) $ {your_filename}
Тревор Бойд Смит

Ответы:

272

Есть несколько способов сделать это. Давайте начнем с основных.

Используя команды split и cat :

Допустим, у меня есть изображение, и оно слишком большое (10 МБ). Все, что я делаю, это:

split --bytes=1M /path/to/image/image.jpg /path/to/image/prefixForNewImagePieces

и затем, чтобы собрать это вместе, я использую cat:

cat prefixFiles* > newimage.jpg

Например:

Предположим, я нахожусь в папке, где находится изображение:

split --bytes=1M myimage.jpg new

если изображение находится внутри каталога с именем images, вы также можете сделать это:

split --bytes=1M images/myimage.jpg new

Если изображение находится в каталоге / home / cyrex / images, вы можете сделать это:

split --bytes=1M /home/cyrex/images/myimage.jpg new

(Во всех случаях выше он будет разделен myimage.jpgна 1 МБ кусков и префикс имени частей со словом новым. Так они будут выглядеть newaa, newab, newac, newad...)

Если вы разбиваете текстовый файл и хотите разбить его на строки, вы можете сделать это:

split -l 1000 book.txt new

Который будет разбивать текстовый файл на выходные файлы по 1000 строк каждый. Это еще один способ разбить файл и в основном используется для текстовых файлов, таких как журналы, дампы sql, файлы csv и т. Д.

Тогда я объединяю их

cat new* > newimage.jpg

Это один из способов. Вы даже можете изменить размер разделенных частей. Просто измените часть , которая говорит --bytes=1Mв --bytes=1K1 килобайт или 1G для гига, или другой номер , как --bytes=4Kдля 4KB штук.

Используя Наутилус

Другим способом является опция сжатия в графическом интерфейсе Nautilus. Это дает вам возможность разбить файл или файлы, которые вы хотите сжать, на меньшие размеры в мегабайтах. Это просто и легко.

Еще один способ использования 7z

Предполагая, что у вас есть ISO-образ, ubuntu.isoвы можете сделать это:

7z a -v5m -mx0 ubuntu.7z ubuntu.iso

Это создаст файлы размером 5 МБ из ubuntu.iso. Размер -v5mтома, поэтому вы можете изменить его на 10, 12, 1, 3, а также m можно изменить на k для килобайтов и т. Д .; -mx0переключатель говорит 7-Zip не использовать без сжатия, то есть, просто разделить данные на части.

Чтобы извлечь просто сделать

7z x ubuntu.7z.001

таким образом вы извлекаете первый файл, и 7z начинает извлекать из следующих файлов по порядку. Вы также можете сделать

7z e ubuntu.7z.001

который имеет такой же эффект здесь.

Луис Альварадо
источник
2
Не включил rar, поскольку он еще не является открытым исходным кодом (насколько я знаю) и не добавил Tar, так как я искал простые способы сделать сплит.
Луис Альварадо
Также добавьте gzip - 7zip требует установки пакета iirc
Broam
Насколько я знаю, Gzip (как и tar) не имеют простой возможности разбить сжатый файл. Во всех случаях я видел, как они использовали команду split для «разделения» файла сжатия. Таким образом, это будет не команда, а группа команд для достижения одной цели, которая может быть выполнена с помощью одной, такой как split или 7z. Для установки 7Zip (который является p7zip пакета p7zip-full) он никогда не спрашивал меня о iirc;).
Луис Альварадо
Добавлено разбиение текстовых файлов. Забыл об этом, и сегодня так получилось, что мне нужно было разбить пару файлов CSV. Это для тех дампов, которые должны иметь определенное количество строк.
Луис Альварадо
10

Используя split -bс соответствующим номером, вы можете получить три штуки.

Номер может быть:

size=$(wc -c <"file name")
one_third=$((size/3+1))

Для сборки используйте cat

cat "file name"* > "file name"

Страницы руководства помогут заполнить детали.

enzotib
источник
1
Вы также можете использовать, split --numberчтобы splitподсчитать количество файлов для вас: askubuntu.com/questions/54579/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
4

HJSplit

Это популярная бесплатная программа для разделения и рекомбинации файлов. Программа доступна на Windows, Linux и множестве других платформ.

HJSplit для Linux - это бесплатный разветвитель файлов для Linux с полностью графическим пользовательским интерфейсом. HJSplit поддерживает файлы размером более 100 гигабайт, Split, Join / Recombine, контрольные суммы MD5, сравнение файлов, «запуск без установки», и программа полностью переносима.

HJSplit для Linux не нужно устанавливать и не зависит от каких-либо специальных библиотек. Просто распакуйте архив hjsplitlx.tar.gz в каталог по вашему выбору и запустите программу из файлового менеджера Linux или из окна терминала. Возможно, вам придется настроить права доступа к файлу программы на «исполняемый файл».

введите описание изображения здесь

Ури Эррера
источник
1
Должен ли я сказать, что файл Windows работает на Linux тоже.
Ури Эррера
2
Есть несколько способов разделить / объединить файл перед тем, как перейти к такой программе. Я скорее использую мощные опции, которые предлагает linux, и для разделения / объединения файлов у него есть довольно быстрые и безопасные способы сделать это.
Луис Альварадо
3
Это безопасно, быстро, и кроссплатформенно, включает в себя LINUX, это не приложение только для WINDOWS, которое просто запускается и в Linux ...
Uri Herrera
2
Я использую HJSplit, это здорово и просто. Нет необходимости вводить команды и имена параметров, когда вы можете просто заполнить значения параметров в текстовых полях.
Мэтью Прочитал
2
А из-за бесплатной загрузки это еще хуже? и должен ли я сказать, что НИГДЕ В ОП он не просит БЕСПЛАТНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ (что это такое, это бесплатно) и то, что вы имеете в виду, называется ОТКРЫТОМ, вы знаете разницу?
Ури Эррера
4

Гном раскололся? http://gnome-split.org/

GNOME Split - это инструмент, который позволяет разбивать файлы и объединять их обратно. Он написан на Java и использует пользовательский интерфейс GTK + (благодаря проекту java-gnome). Цель состоит в том, чтобы предложить собственную реализацию похожих проектов, которые могут обрабатывать несколько форматов файлов (например, Xtremsplit).

http://www.omgubuntu.co.uk/2010/08/split-large-files-easily-in-ubuntu-with-gnome-split/

Фрэнк Зафка
источник
3

HOZ - Hacha Open Zource v1.65 - http://hoz.sourceforge.net/

введите описание изображения здесь

От разработчика:

OZ - это то, что вы бы назвали «разделителем файлов». Формат файла такой же, как и в программном обеспечении «Hacha», хорошо известном в Испании и Латинской Америке. HOZ - это портативная C-реализация с открытым исходным кодом, совместимая с Hacha.

ХОЗ меньше и быстрее чем "хача".

Кстати, я использовал вместо Z букву «S» в «Zource», потому что «hoz» - это «серп» по-испански, а «hacha» - испанское слово «ax» ...

После установки вы можете использовать Hoz GUI, опустив ghozв терминал. Операция настолько проста, что не нуждается в объяснении, но дополнительную информацию можно найти на сайте разработчика.

Удачи!

Geppettvs D'Constanzo
источник
0

дровосек

Бесплатная утилита для разделения и объединения файлов, разработанная на Java. Это приложение небольшого размера, которое позволяет пользователю разделить любой тип файла на меньшие размеры в КБ, МБ или ГБ.

Он доступен как для Linux, так и для Windows.

WoodCutter предлагает 3 способа объединения исходных файлов. WoodCutter создает файл слияния, который может быть обработан приложением WoodCutter для объединения всех файлов обратно. В случае, если в приемнике разделенных файлов не установлен WoodCutter, можно также получить исходный файл, поскольку WoodCutter также создает командный файл и файл сценария оболочки для объединения файлов. Пакетный файл будет использоваться на платформе Windows, а сценарий Shell будет использоваться на платформах Linux.

http://java-puzzle.blogspot.com/2009/07/woodcutter.html

Manas
источник
2
Лицензия является «бесплатной». Я думаю, что инструмент свободного программного обеспечения, который находится в репозиториях, является лучшим решением.
Broam
0

split --number

Это хороший вариант для создания N файлов с одинаковым размером, за исключением последнего, который может быть больше из-за неделимости. Например:

printf '0123456789' > f.txt
split -d --number 2 f.txt f.txt.part.
tail f.txt.part.*

дает:

==> f.txt.part.00 <==
01234
==> f.txt.part.01 <==
56789

а также:

split -d --number 3 f.txt f.txt.part.
tail f.txt.part.*

дает:

==> f.txt.part.00 <==
012
==> f.txt.part.01 <==
345
==> f.txt.part.02 <==
6789

По сравнению с -bявным расчетом размера +, который был упомянут по адресу: https://askubuntu.com/a/54584/52975 , последний файл может быть почти в 2 раза больше, чем предыдущие, что иногда является недостатком этой опции. Однако во многих случаях это удобнее, так как вам не нужно самостоятельно вычислять размер.

Равное количество строк было задано по адресу: https://stackoverflow.com/questions/2016894/how-to-split-a-large-text-file-into-smaller-files-with-equal-number-of-lines

Протестировано в split2.28, Ubuntu 18.04.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник