Можно ли объединить несколько архивов bz2 в один? - PullRequest
7 голосов
/ 04 августа 2011

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

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

Ответы [ 4 ]

29 голосов
/ 01 ноября 2011

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

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

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

4 голосов
/ 08 ноября 2011

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

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

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

lbzip2 -dc file*.bz2 | lbzip2 >resulting_file.bz2
3 голосов
/ 04 августа 2011

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

tar cf tarofbzfiles.tar *.bz2
2 голосов
/ 22 февраля 2013

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

bzcat file*.bz2 | bzip2 >resulting_file.bz2
...