3

最初にコマンドを使用して、フォルダーの圧縮コピーを2つ作成しtar czf dir.tar.gz dir ました。これにより、サイズが〜16kbのアーカイブが得られます。次に、別の方法を試しました。最初に、ディレクトリ内のすべてのファイルをガンジップしてから使用しました

gzip ./dir/*
tar cf dir.tar dir/*.gz

しかし、2番目の方法では、サイズが約30kb(ほぼ2倍)のdir.tarが得られました。大きさにこんなに差があるのはなぜ?

4

3 に答える 3

8

一般に、zip プロセスは小さなファイルよりも大きなサンプルの方が効率的であるためです。たとえば、1ko の 100 個のファイルを圧縮したとします。各ファイルには特定の圧縮率と、gzip 形式のオーバーヘッドがあります

file1.tar -> files1.tar.gz  (admit 30 bytes of headers/footers)
file2.tar -> files2.tar.gz  (admit 30 bytes of headers/footers)
...
file100.tar -> files100.tar.gz  (admit 30 bytes of headers/footers)
------------------------------
30*100 = 3ko of overhead.

ただし、100ko のファイル (100 個のファイルを含む) を圧縮しようとするtarと、gzip 形式のオーバーヘッドが (100 回ではなく) 1 回だけ追加され、圧縮率が向上する可能性があります)。

于 2014-02-12T19:15:44.427 に答える
3

gzipファイルごとのメタデータと、ファイルを個別に処理する場合の最適ではない圧縮によるオーバーヘッドは、gzip完全なデータを観察せず、最適ではないディクショナリ (ファイルごとにリセットされる) で圧縮することに起因します。

于 2014-02-12T19:15:25.167 に答える
-3

tar cf圧縮されていないアーカイブを作成する必要があります。つまり、ディレクトリのサイズはアーカイブとほぼ同じか、それ以上になるはずです。

tar czfgunzipそれを介して圧縮が実行されます。

man tarこれは、Linux でシェル プロンプトを実行することでさらに確認できます。

   -z, --gzip, --gunzip, --ungzip
          filter the archive through gzip
于 2014-02-12T19:14:04.167 に答える