Riunire insieme un sacco di file può migliorare la compressione con gli strumenti standard, ad esempio gzip, bzip2, xz?
Ho pensato a lungo che fosse così, ma non l'ho mai provato. Se abbiamo 2 copie dello stesso file da 20 Mb di byte casuali tarati insieme, un programma di compressione intelligente che si rende conto che questo potrebbe comprimere l'intero tarball fino a quasi 20 Mb.
Ho appena provato questo esperimento usando gzip, bzip2 e xz per comprimere 1) un file di byte casuali, 2) un tarball di due copie di quel file e 3) un gatto di due copie di quel file. In tutti i casi la compressione non ha ridotto le dimensioni del file. Ciò è previsto per il caso 1, ma per i casi 2 e 3 il risultato ottimale è che un file da 40 Mb può essere ridotto a quasi 20 Mb. È una visione difficile da vedere per un programma di compressione, soprattutto perché la ridondanza è distante, quindi non mi aspetto un risultato perfetto ma ho comunque pensato che ci sarebbe stata una certa compressione.
Test:
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*
Risultato:
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
È generalmente quello che dovrei aspettarmi?
C'è un modo per migliorare la compressione qui?