一連のファイルをまとめてtarで圧縮すると、標準ツール(gzip、bzip2、xzなど)で圧縮を改善できますか?
私は長い間これが事実であると思っていましたが、それを試したことはありません。ランダムなバイトの同じ20Mbファイルの2つのコピーが一緒にtarされている場合、これを実現する巧妙な圧縮プログラムは、tarball全体をほぼ20Mbに圧縮できる可能性があります。
私は、gzip、bzip2、およびxzを使用して、1)ランダムバイトのファイル、2)そのファイルの2つのコピーのtarball、および3)そのファイルの2つのコピーの猫を使用して、この実験を試しました。すべての場合において、圧縮によってファイルサイズが縮小されることはありませんでした。これはケース1で予想されますが、ケース2および3の場合、最適な結果は、40Mbファイルを約20Mbに縮小できることです。これは、特に冗長性が離れているため、圧縮プログラムにとっては難しい洞察です。完璧な結果を期待することはできませんが、ある程度の圧縮があるとは思っていました。
テスト:
dd if=/dev/urandom of=random1.txt bs=1M count=20
cp random1.txt random2.txt
cat random1.txt random2.txt > random_cat.txt
tar -cf randoms.tar random1.txt random2.txt
gzip -k random* &
bzip2 -k random* &
xz -k random* &
wait
du -sh random*
結果:
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 1.40937 s, 14.9 MB/s
[1] Done gzip -k random*
[2]- Done bzip2 -k random*
[3]+ Done xz -k random*
20M random1.txt
21M random1.txt.bz2
21M random1.txt.gz
21M random1.txt.xz
20M random2.txt
21M random2.txt.bz2
21M random2.txt.gz
21M random2.txt.xz
40M random_cat.txt
41M random_cat.txt.bz2
41M random_cat.txt.gz
41M random_cat.txt.xz
41M randoms.tar
41M randoms.tar.bz2
41M randoms.tar.gz
41M randoms.tar.xz
これは一般的に私が期待すべきことですか?
ここで圧縮を改善する方法はありますか?