Почему gzip на выходе tar всегда дает разные результаты?

То, что я ожидаю от двух команд, которые всегда производят один и тот же вывод самостоятельно, заключается в том, что они всегда выдают один и тот же результат при вводе в конвейер, но, по-видимому, это не относится к tar | gzip:

[ f1]

. Добавляя к этому, даже tar cfz file.tar file сам по себе производит разные выходы:

~/test$ tar cfz file2.tar file // Archiving and compressing the file
~/test$ tar cfz file3.tar file // Archiving and compressing the file again
~/test$ cmp file2.tar.gz file3.tar.gz // Comparing the output files
file2.tar.gz file3.tar.gz differ: byte 5, line 1 // File differs at byte 5
~/test$ cmp -i 5 file2.tar.gz file3.tar.gz // Comparing the output files after byte 5
~/test$ 

. Разделение конвейера, наконец, дает результат, который имеет смысл:

~/test$ gzip -c file.tar > file4.tar.gz
~/test$ gzip -c file.tar > file5.tar.gz
~/test$ cmp file4.tar.gz file5.tar.gz 
~/test$ 

Похоже, что все, что происходит, происходит только тогда, когда вывод tar передается непосредственно в gzip.

Каково объяснение этого поведения?

1
задан 16 April 2015 в 08:20

1 ответ

Файлы Gzip содержат временную метку. Если вы создадите два файла gzip в разное время, они будут отличаться по времени создания, а не по контенту.

5
ответ дан 23 May 2018 в 23:05
  • 1
    Нет или, по крайней мере, не в этом случае, потому что это не объясняет, почему gzip тот же файл в два разных раза, как в строках 9-10-11 первого фрагмента, производит тот же самый вывод. Я тестировал снова, ожидая одну минуту между двумя компрессиями, и выход все еще идентичен – kos 20 February 2015 в 17:03
  • 2
    @kos: при запуске gzip [-c] filename gzip берет метку времени из файла. – Andrea Corbellini 20 February 2015 в 17:59
  • 3
    Теперь это более понятно, спасибо. Я поддержал ваш ответ с того момента, как вы были первыми, но выбрал правильный ответ Clayton Mills из-за его торичности – kos 20 February 2015 в 19:31

Другие вопросы по тегам:

Похожие вопросы: