Можно ли объединить несколько архивов bz2 в один?

У меня есть несколько (27) огромных (по несколько ГБ каждый) архивных файлов bz2, которые мне нужно объединить в один архив bz2. Разархивировать их, а затем создать новый архив из того, что было только что несжатым, для меня не вариант, так как в сжатом виде все 27 файлов в сумме составляют около 100 ГБ, а в несжатом — около 5-6 ТБ (да, это ТЕРАбайты, лол).

Можно ли это сделать с помощью какого-то скрипта или есть даже другой формат сжатия, который позволяет это сделать (проще)?


person dmn    schedule 04.08.2011    source источник


Ответы (4)


Если вы готовы сжечь несколько дней ЦП, вот одно решение с волшебным средством конвейера современных операционных систем UNIX (R):

bzip2 -dc file*.bz2 | bzip2 >resulting_file.bz2

... на самом деле, возьмите lbzip2 версия 2.0 и сделайте то же самое, за исключением lbzip2, на многоядерном компьютере:

lbzip2 -dc file*.bz2 | lbzip2 >resulting_file.bz2
person lacos    schedule 08.11.2011

Вы можете просто объединить несколько файлов bz2 в один файл bz2, например:

$ cat file1.bz2 file2.bz2 file3.bz2 >resulting_file.bz2

bzip2 и другие утилиты, такие как lbzip2, смогут распаковать полученный файл, как и ожидалось.

person Mikołaj Izdebski    schedule 01.11.2011
comment
На самом деле, это работает! От человека bzip2: bunzip2 will correctly decompress a file which is the concatenation of two or more compressed files. The result is the concatenation of the corresponding uncompressed files. Integrity testing (-t) of concatenated compressed files is also supported. - person ventura10; 18.08.2014

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

tar cf tarofbzfiles.tar *.bz2
person Petesh    schedule 04.08.2011
comment
На самом деле мне действительно нужен один архив, содержащий все содержимое 27 архивов, лол. Я почти уверен, что один архив, содержащий 27 архивов, к сожалению, не подойдет для моей цели. :( - person dmn; 04.08.2011
comment
Какой тип файла представляет собой архив .bz2? если это файл tar, то их можно объединить. Для этого потребуется сценарий, связывающий распаковку каждого из архивов в их собственный канал/fifo, который используется в наборе команд tar -A, которые все завершаются в fifo, который передается через bzip2. - person Petesh; 05.08.2011
comment
Я думаю, что каждый файл представляет собой один (огромный) файл XML. В настоящее время я пробую команду под названием bzcat следующим образом: bzcat *.bz2 > newfile.bz2. Я начал это более часа назад, так что посмотрим, как оно пойдет ... намного позже. :) - person dmn; 05.08.2011
comment
bzcat *.bz2 | bzip2 -c › newfile.bz2 - если вы не заархивируете файл повторно bzip2, вы не получите сжатие!! - person Petesh; 05.08.2011

Вы можете сократить ответ @lacos с помощью встроенного сокращения bzcat для bzip2 -dc и, как обычно, вернуться к bzip2. Не более правильно, чем @lacos, но немного хитрее;)

bzcat file*.bz2 | bzip2 >resulting_file.bz2
person tannermares    schedule 22.02.2013