我有几个 (27) 个巨大的(每个几个 GB)bz2 存档文件,我需要将它们合并到一个 bz2 存档中。解压它们然后从刚刚解压的文件中创建一个新的存档对我来说不是一个选择,因为压缩后,所有 27 个文件加起来大约 100GB,解压后大约为 5-6TB(是的,那是 TERAbytes,哈哈)。
这可以用某种脚本来完成,还是有另一种压缩格式允许这样做(更容易)?
我有几个 (27) 个巨大的(每个几个 GB)bz2 存档文件,我需要将它们合并到一个 bz2 存档中。解压它们然后从刚刚解压的文件中创建一个新的存档对我来说不是一个选择,因为压缩后,所有 27 个文件加起来大约 100GB,解压后大约为 5-6TB(是的,那是 TERAbytes,哈哈)。
这可以用某种脚本来完成,还是有另一种压缩格式允许这样做(更容易)?
您可以简单地将许多 bz2 文件连接成单个 bz2 文件,如下所示:
$ cat file1.bz2 file2.bz2 file3.bz2 >resulting_file.bz2
bzip2
和其他类似的实用程序lbzip2
将能够按预期解压缩生成的文件。
如果您愿意消耗几天的 CPU,这里有一个具有现代 UNIX(R) 操作系统的神奇管道设施的解决方案:
bzip2 -dc file*.bz2 | bzip2 >resulting_file.bz2
...实际上,抓住 lbzip2版本 2.0,并在多核上执行相同操作,但使用 lbzip2 除外:
lbzip2 -dc file*.bz2 | lbzip2 >resulting_file.bz2
您应该翻转这个问题 - 您不应该尝试解压缩然后重新压缩文件,只需将所有单独的文件制作成一个 tar 存档 - tar 作为单独文件的容器是理想的。
tar cf tarofbzfiles.tar *.bz2
bzcat
您可以使用内置的简写来缩短@lacos 的答案,bzip2 -dc
并bzip2
照常返回。不比@lacos 更正确,但更圆滑;)
bzcat file*.bz2 | bzip2 >resulting_file.bz2