可以将一堆文件一起使用标准工具(例如gzip,bzip2,xz)改善压缩率吗?
我一直以为是这种情况,但从未对其进行过测试。如果我们将同一个20Mb文件的2个副本的随机字节放在一起,那么一个聪明的压缩程序将实现将整个tarball压缩到将近20Mb。
我刚刚尝试使用gzip,bzip2和xz压缩此实验,以压缩1)一个随机字节的文件,2)包含该文件两个副本的tarball,以及3)包含该文件两个副本的cat。在所有情况下,压缩都不会减小文件大小。对于情况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
这通常是我应该期待的吗?
有没有办法改善压缩率?