Я думал, что следующие команды эквивалентны, но они производят разные контрольные суммы:
tar -cvzf ...
и tar -cvf ...; gzip ...
не дает такой же результат.
sha1sum
отличается.
Что было бы gzip
команда, которая идеально соответствовала бы tar -cvzf
поведение?
Разница в выходных файлах, вероятно, НЕ связана с методом сжатия. По умолчанию GNU tar использует стандартный GZIP сдувать Режим. Одна из причин различия заключается в формате файла, сжатого GZIP.
Структура первых 8 байтов заголовка GZIP выглядит следующим образом
OFFSET SIZE VALUE COMMENT
0 1 0x1F First "magic" id
1 1 0x8B Second "magic" id
2 1 CM Compression method
3 1 FLAGS 8-bit flag register
4 4 MTIME Object modification time
Проблема в MTIME
поле. Для данных, поступающих из канала, это значение текущего времени Unix (секунды с 1 января 1970 г.). Поэтому два идентичных в остальном сжатых архива, созданных с интервалом не менее одной секунды друг от друга, будут разными.
Попробуйте бежать tar -cvzf
дважды на одних и тех же данных и сравните результаты. Результаты будут отличаться пятым байтом, младшим байтом значения временной метки.
$ tar czvf test1.tgz tmp/ ; sleep 2 ; \
tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz
tmp/
tmp/test
tmp/
tmp/test
23d46f62dd4a9a0851279df7fe15842e test1.tgz
c8ae65026a5f771c63acf87a18f7379c test2.tgz