Le goudronnage d'un ensemble de fichiers peut-il améliorer la compression avec les outils standard, par exemple gzip, bzip2, xz?
J'ai longtemps pensé que c'était le cas, mais je ne l'ai jamais testé. Si nous avons 2 copies du même fichier de 20 Mo d'octets aléatoires goudronnées ensemble, un programme de compression intelligent qui s'en rend compte pourrait compresser l'intégralité de l'archive tar jusqu'à presque 20 Mo.
Je viens d'essayer cette expérience en utilisant gzip, bzip2 et xz pour compresser 1) un fichier d'octets aléatoires, 2) une archive tar de deux copies de ce fichier et 3) un chat de deux copies de ce fichier. Dans tous les cas, la compression n'a pas réduit la taille du fichier. Cela est attendu pour le cas 1, mais pour les cas 2 et 3, le résultat optimal est qu'un fichier de 40 Mo peut être réduit à près de 20 Mo. C'est un aperçu difficile à voir pour un programme de compression, surtout parce que la redondance est éloignée, donc je ne m'attendais pas à un résultat parfait, mais j'avais toujours pensé qu'il y aurait une compression.
Tester:
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*
Résultat:
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
Est-ce généralement ce à quoi je dois m'attendre?
Y a-t-il un moyen d'améliorer la compression ici?