假设我们有多个包存储为.tar.gz
文件,我们希望将它们组合成一个包。关于无损文件压缩,我所知道的一切都是它试图在数据中找到模式。由此,我的直觉是,如果我首先将包解压缩为.tar
文件,然后将它们组合为一个bundle.tar.gz
,它将能够找到更多的模式,从而产生更小的捆绑包。我的直觉正确吗?还是不值得麻烦,直接从.tar.gz
文件创建捆绑包会产生类似的结果?
我用随机收集的txts(RFC 1-500,来自https://www.rfc-editor.org/retrieve/bulk/)单独压缩它们中的每一个,然后从压缩的文件中创建最终的.tar.gz
,结果会大15%,这支持了我的直觉,但可能没有达到我预期的程度。
total size of txts: 5.6M
total size of individually compressed txts: 2.7M
size of .tar.gz from txts: 1.4M
size of .tar.gz from compressed txts: 1.6M
我想更多地了解它的总体表现。
用gzip压缩已经压缩的东西通常会扩展数据,但只扩展很小的一部分,将大小乘以1.0003。
事实上,你从解压缩片段和重新压缩捆绑包中获得了15%的好处,这意味着你的片段必须相对较小,才能让gzip的32K字节匹配距离找到更多的匹配,并将压缩增加那么多。(你没有说明这些单独压缩的文本有多少。(
顺便说一下,将几个.tar文件合并为一个.tar文件很容易。每个.tar文件都以1024个零字节终止。从除最后一个以外的每个.tar文件中剥离它,并将它们连接起来。然后您有一个.tar文件要压缩。