Может ли объединение нескольких файлов улучшить сжатие стандартными инструментами, например, gzip, bzip2, xz?
Я долго думал, что это так, но никогда не проверял. Если у нас есть 2 копии одного и того же файла размером 20 МБ, взятых вместе, случайная байта, умная программа сжатия, которая понимает, что это может сжать весь архив до почти 20 МБ.
Я только что попробовал этот эксперимент, используя gzip, bzip2 и xz для сжатия 1) файла случайных байтов, 2) архива из двух копий этого файла и 3) кота из двух копий этого файла. Во всех случаях сжатие не уменьшало размер файла. Это ожидается для случая 1, но для случаев 2 и 3 оптимальный результат заключается в том, что файл размером 40 МБ можно сжать до почти 20 МБ. Это трудно понять программе сжатия, особенно потому, что избыточность удалена, поэтому я не ожидал бы идеального результата, но я все еще думал, что будет некоторое сжатие.
Тестовое задание:
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*
Результат:
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
Это вообще то, что я должен ожидать?
Есть ли способ улучшить сжатие здесь?