2013-11-18 4 views
2

Вот как он сравнивает с bzip2:Почему `gzip` генерирует разные двоичные файлы при сжатии одного и того же файла?

$ /tmp ls testdir 
xxx!                                                    
$ /tmp cat testdir/xxx\! 
$ /tmp tar -czf t1.tgz testdir                                             
$ /tmp tar -czf t2.tgz testdir 
$ /tmp md5sum t1.tgz 
5485da4154e180b2c30cb43ed721aee9 t1.tgz 
$ /tmp md5sum t2.tgz 
c494cd05ea3fd3aee997c541983423bd t2.tgz 
$ /tmp tar -cjf t1.bz2 testdir 
$ /tmp tar -cjf t2.bz2 testdir 
$ /tmp md5sum t1.bz2                                               
35003556c14da931e0bb31e56a8c42f9 t1.bz2 
$ /tmp md5sum t2.bz2                                               
35003556c14da931e0bb31e56a8c42f9 t2.bz2 

Интересно, почему имя архивного файла влияет на вывод gzip.

+4

Это не алгоритм сжатия, который отвечает за разницу в данных, а за команду архива «tar». Он также сохраняет имена файлов, разрешения и время доступа. Скорее всего, время изменилось между двумя прогонами. – arkascha

+0

@arkascha На самом деле, gzip-сжатые файлы содержат исходное имя файла, которое здесь может быть различным. Я не знаю, как tar вызывает gzip (или сжат внутренне), чтобы быть уверенным, что это причина. – hvd

+0

@arkascha Но когда я использую 'bz2', результат не влияет на разные имена архива. Если это так, что несжатые архивы tar в обоих случаях различны, 'bz2' также должен генерировать разные результаты. – satoru

ответ

1

Запустите file t1.tgz t2.tgz, и вы должны увидеть разницу. gzip-сжатые файлы содержат имя файла и время модификации. Часть имени файла не используется в моей системе так, как вы создаете архивы, но время модификации. Если вы повторно создадите файл с одним конкретным именем, вы все равно получите разные файлы.

Смежные вопросы