最初にコマンドを使用して、フォルダーの圧縮コピーを2つ作成しtar czf dir.tar.gz dir
ました。これにより、サイズが〜16kbのアーカイブが得られます。次に、別の方法を試しました。最初に、ディレクトリ内のすべてのファイルをガンジップしてから使用しました
gzip ./dir/*
tar cf dir.tar dir/*.gz
しかし、2番目の方法では、サイズが約30kb(ほぼ2倍)のdir.tarが得られました。大きさにこんなに差があるのはなぜ?
一般に、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 回だけ追加され、圧縮率が向上する可能性があります)。
gzip
ファイルごとのメタデータと、ファイルを個別に処理する場合の最適ではない圧縮によるオーバーヘッドは、gzip
完全なデータを観察せず、最適ではないディクショナリ (ファイルごとにリセットされる) で圧縮することに起因します。
tar cf
圧縮されていないアーカイブを作成する必要があります。つまり、ディレクトリのサイズはアーカイブとほぼ同じか、それ以上になるはずです。
tar czf
gunzip
それを介して圧縮が実行されます。
man tar
これは、Linux でシェル プロンプトを実行することでさらに確認できます。
-z, --gzip, --gunzip, --ungzip
filter the archive through gzip