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。 123MBでは、ここにある例ほど極端ではないとしても、あるファイルが他のファイルよりも「ランダム」(圧縮しにくい)に見えるスペースがかなり多いです。


圧縮結果ファイルのサイズを制御するには、元のファイルをより小さな部分に分割して個別に圧縮し、目的のサイズ制限に達するまで圧縮された部分を一緒にリンクします。 (しかし、これを行う簡単な方法は思いません。)

入力に複数gzip -dgzip圧縮ファイルが含まれている場合は、すべて解凍されます。ただし、分割するとデータが人為的に中断されるため、圧縮パフォーマンスが一部失われます。

関連情報