14

非常によく似た、4つの大きなファイルを含むフォルダーのコンテンツをzip形式で圧縮しようとしています。なので、サイズが小さくなると思います。

linux/fedoraで使用しているコマンドは次のとおりです。

zip -9 myarchive.zip -r myfolder -P mypassword

応答があります:

adding: myfolder/ (stored 0%)
adding: myfolder/Program1.exe (deflated 0%)
adding: myfolder/Program2.exe (deflated 0%)
adding: myfolder/Program3.exe (deflated 0%)
adding: myfolder/Program4.exe (deflated 0%)

次に、元のフォルダーとほぼ同じサイズのアーカイブを取得します。

圧縮がまったく行われていないようです。なんで?

4

4 に答える 4

20

tar+gzipとは異なりzip、ファイルごとに新しい圧縮テーブルを使用するため、4つのファイルが同一であっても、それぞれを個別に圧縮しようとします。

技術的には、tar各ファイルも表示されますが、それらを1つの長い入力にまとめますgzip。したがって、圧縮ステップは1つの巨大な入力で機能します。そのため、 tar+gzipは通常。よりも小さい結果を生成しzipます。

exe問題は、ファイルを圧縮できない理由です。exeファイルには通常、簡単に圧縮できるデータが大量に含まれているため、少なくとも30%縮小(「収縮」)する必要があります。たぶん、ファイルは暗号化されているか、難読化されています。これらのプロセスにより、結果の圧縮が困難になります。

于 2012-11-09T13:52:34.613 に答える
5

収縮した0%は、圧縮を試みたが、事実上圧縮されなかったことを意味します。前述のように、zip形式では異なるエントリ間の類似性を利用できません。tar + gzipは可能ですが、それでも、類似点が互いに32Kバイト未満になる場合に限ります。xzなどの他の形式では、長距離の類似性を利用できます。

非圧縮の実行可能ファイルは30%から50%圧縮されるのが普通です。つまり、実行可能ファイルはa) UPXのようなものによって圧縮され、b)自己解凍型の圧縮データであり、圧縮解除されたデータの前に解凍が保存されます。 、c)多くの圧縮データを含む非常に短い実行可能ファイル、またはd)ほとんどが暗号化されています。

于 2012-11-09T15:51:43.427 に答える
3

アーロンは正しいです。によるとWikipediaZIPフォーマットはアーカイブする前に圧縮されるため、異なるファイル間の類似性は圧縮に役立ちません。

あなたは本当に.exeファイルを圧縮しようとしていますか?どういうわけか、それがあなたの実際のファイルタイプではないかと思います。

http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantagesを参照してください。

于 2012-11-09T14:03:41.507 に答える
2

一部のファイルは、特にエントロピーが高い場合、圧縮できません。これは、バイトの統計的分布が偶数の場合に発生します(たとえば、バイト0がバイト2と同じくらい頻繁にバイト1に表示される場合...)。これは、すでに圧縮されているコンテンツに対して発生します。一部のビデオまたはオーディオ形式は、そのカテゴリに分類されます。

于 2012-11-09T13:35:03.920 に答える