Tarar vários arquivos juntos pode melhorar a compactação com as ferramentas padrão, por exemplo, gzip, bzip2, xz?
Há muito tempo penso que seja esse o caso, mas nunca o testei. Se tivermos 2 cópias do mesmo arquivo de 20Mb de bytes aleatórios reunidos, um programa de compactação inteligente que percebe isso pode compactar o tarball inteiro para quase 20Mb.
Eu apenas tentei esse experimento usando gzip, bzip2 e xz para compactar 1) um arquivo de bytes aleatórios, 2) um tarball de duas cópias desse arquivo e 3) um gato de duas cópias desse arquivo. Em todos os casos, a compactação não reduziu o tamanho do arquivo. Isso é esperado para o caso 1, mas para os casos 2 e 3, o resultado ideal é que um arquivo de 40 Mb pode ser reduzido para quase 20 Mb. Essa é uma visão difícil para um programa de compactação, especialmente porque a redundância é distante, então eu não esperaria um resultado perfeito, mas eu ainda imaginava que haveria alguma compactação.
Teste:
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
É geralmente o que eu deveria esperar?
Existe uma maneira de melhorar a compactação aqui?