Kann das gemeinsame Teern mehrerer Dateien die Komprimierung mit den Standardwerkzeugen verbessern, z. B. gzip, bzip2, xz?
Ich habe lange gedacht, dass dies der Fall ist, habe es aber nie getestet. Wenn wir 2 Kopien derselben 20-MB-Datei mit zufälligen Bytes haben, die zusammen geteert sind, könnte ein cleveres Komprimierungsprogramm, das dies erkennt, den gesamten Tarball auf fast 20 MB komprimieren.
Ich habe gerade dieses Experiment mit gzip, bzip2 und xz versucht, um 1) eine Datei mit zufälligen Bytes, 2) einen Tarball mit zwei Kopien dieser Datei und 3) eine Katze mit zwei Kopien dieser Datei zu komprimieren. In allen Fällen hat die Komprimierung die Dateigröße nicht verringert. Dies wird für Fall 1 erwartet, aber für die Fälle 2 und 3 ist das optimale Ergebnis, dass eine 40-MB-Datei auf fast 20 MB verkleinert werden kann. Das ist eine schwierige Erkenntnis für ein Komprimierungsprogramm, insbesondere weil die Redundanz weit entfernt ist. Ich würde also kein perfektes Ergebnis erwarten, aber ich hatte immer noch gedacht, dass es eine gewisse Komprimierung geben würde.
Prüfung:
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*
Ergebnis:
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
Ist das allgemein das, was ich erwarten sollte?
Gibt es hier eine Möglichkeit, die Komprimierung zu verbessern?