¿Puede agrupar un montón de archivos juntos mejorar la compresión con las herramientas estándar, por ejemplo, gzip, bzip2, xz?
Durante mucho tiempo pensé que este era el caso, pero nunca lo probé. Si tenemos 2 copias del mismo archivo de 20Mb de bytes aleatorios alquilados juntos, un programa de compresión inteligente que se dé cuenta de esto podría comprimir todo el tarball hasta casi 20Mb.
Acabo de probar este experimento usando gzip, bzip2 y xz para comprimir 1) un archivo de bytes aleatorios, 2) un tarball de dos copias de ese archivo y 3) un gato de dos copias de ese archivo. En todos los casos, la compresión no redujo el tamaño del archivo. Esto se espera para el caso 1, pero para los casos 2 y 3, el resultado óptimo es que un archivo de 40Mb puede reducirse a casi 20Mb. Esa es una visión difícil de ver para un programa de compresión, especialmente porque la redundancia es distante, por lo que no esperaría un resultado perfecto, pero todavía pensé que habría algo de compresión.
Prueba:
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*
Resultado:
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
¿Es esto generalmente lo que debo esperar?
¿Hay alguna manera de mejorar la compresión aquí?