Bisakah tarring banyak file bersama-sama meningkatkan kompresi dengan alat standar, misalnya gzip, bzip2, xz?
Saya sudah lama berpikir ini adalah masalahnya tetapi tidak pernah mengujinya. Jika kita memiliki 2 salinan file 20Mb yang sama dari byte acak yang ditampung bersama, sebuah program kompresi cerdas yang menyadari hal ini dapat memampatkan seluruh tarball hingga hampir 20 MB.
Saya baru saja mencoba percobaan ini menggunakan gzip, bzip2, dan xz untuk mengkompres 1) file byte acak, 2) tarball dua salinan file itu, dan 3) kucing dua salinan file itu. Dalam semua kasus, kompresi tidak mengurangi ukuran file. Ini diharapkan untuk kasus 1 tetapi untuk kasus 2 dan 3 hasil optimal adalah bahwa file 40 MB dapat menyusut menjadi hampir 20 MB. Itu wawasan yang sulit dilihat oleh program kompresi, terutama karena redundansi jaraknya jauh, jadi saya tidak akan mengharapkan hasil yang sempurna tetapi saya masih mengira akan ada beberapa kompresi.
Uji:
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*
Hasil:
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
Apakah ini umumnya yang harus saya harapkan?
Apakah ada cara untuk meningkatkan kompresi di sini?