Разбить большой файл на мелкие кусочки


65

Как разбить большой файл + 4 ГБ на более мелкие файлы размером около 500 МБ каждый.

И как мне снова собрать их, чтобы получить оригинальный файл?



Ответы:


79

Вы можете использовать сплит и кот .

Например что-то вроде

$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.

(где входное имя файла fooи последний аргумент - выходной префикс). Это создаст файлы как foo.000 foo.001...

Та же команда с короткими опциями:

$ split -b 100k -d -a 3 foo foo

Вы также можете указать «--line-bytes», если хотите разделить границы строк, а не просто точное количество байтов.

Для повторной сборки сгенерированных частей вы можете использовать, например:

$ cat foo.* > foo_2

(при условии, что оболочка сортирует результаты подстановки оболочки - и количество частей не превышает системно-зависимый предел аргументов)

Вы можете сравнить результат через:

$ cmp foo foo_2
$ echo $?

(который должен вывести 0)

Кроме того, вы можете использовать комбинацию find / sort / xargs для повторной сборки частей:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3

2
Попробуйте эту команду:man split cat md5sum
Кевин М

6
При сборке рекомендую cat foo.{000..NNN}где NNNпоследний ожидаемый кусок. Таким образом, вы получите сообщение об ошибке, если одна из частей отсутствует. Но обратите внимание, что -dдля получения числовых суффиксов характерно разделение GNU; на других платформах вы должны сделать с foo.aaa, foo.aabи т.д.
«SO- остановка будучи злы» Жиля

1
И имейте в виду, что, для split, KB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024 и т. Д.
Zorawar

1
Не должно ли это ... cat > foo_3быть ... cat >>foo_3?
алк

1
Если вы решили облегчить боль с помощью утилиты. rarи 7zipчасто используются для облегчения сборки таких кроссплатформенных
сборок

4

Вы также можете сделать это с Archive Manager, если вы предпочитаете графический интерфейс. Посмотрите под 'Сохранить-> Другие параметры-> Разделить на тома'.


5
я отметил это как 'командная строка', но спасибо за ответ :)
Стефан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.