为什么 gzip 不创建相同大小的文件?

为什么 gzip 不创建相同大小的文件?

我有一个文件需要分割成较小的大小(压缩时<24M)

继承人的文件:

498775505 Mar  8 00:08 test.file

我把它分开了:

split -b 125000k test.file test.file.

现在我有甚至大小的文件(除了最后一个文件,这很好)

476M Mar  8 00:08 test.file
123M Mar  8 00:09 test.file.aa
123M Mar  8 00:09 test.file.ab
123M Mar  8 00:09 test.file.ac
110M Mar  8 00:09 test.file.ad

但是当我对这些文件进行 gzip 压缩时,它们并没有均匀地压缩

gzip test.file.a*

476M Mar  8 00:08 test.file
27M Mar  8 00:09 test.file.aa.gz
23M Mar  8 00:09 test.file.ab.gz
22M Mar  8 00:09 test.file.ac.gz
20M Mar  8 00:09 test.file.ad.gz

有人可以解释一下 gzip 发生了什么吗?

(这更多是出于好奇,因为我可以将它们分成较小的数量以将它们放在下面24M,只是想知道 gzip 在这里是如何工作的)

答案1

分割文件包含原始(完整)文件的不同部分,它们可能具有不同的内容。 (它们相同的唯一方法是原件高度重复。)

不同的内容会导致不同的压缩结果。像这样的东西aaaaaaaaaa比 更容易压缩wekfsiorlm。在 123 MB 的文件中,有相当大的空间可以让一个文件比另一个文件看起来更“随机”(更难压缩),即使它不像我这里的示例那么极端。


如果要控制压缩结果文件的大小,可以将原始文件分割成较小的部分,单独压缩它们,然后将压缩部分连接在一起,直至达到所需的大小限制。 (不过,我想不出一个简单的方法来做到这一点。)

如果输入包含gzip -d多个压缩gzip“文件”,它将全部解压缩。尽管这会损失一些压缩性能,因为分割会导致数据人为中断。

相关内容