Назад | Перейти на главную страницу

Команда gzip для получения того же результата, что и tar -cvzf?

Я думал, что следующие команды эквивалентны, но они производят разные контрольные суммы:

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