1

Я случайно удалил горстку сжатых файлов из папки. К счастью, я распаковал их в другом месте и сейчас занимаюсь их восстановлением. У меня были контрольные суммы md5 для старых (теперь удаленных) файлов, но контрольные суммы для вновь сжатых файлов не совпадают. Дерьмо.

Но... У меня есть другая папка, которая содержит аналогичные файлы gzip из того же источника, и я, когда я gunzip а затем сразу gzip один из этих файлов, контрольная сумма снова отличается, что заставляет меня подозревать, что создатель файлов использовал другие параметры для gzip ( если есть альтернативное объяснение, я хотел бы услышать это).

Есть ли способ идентифицировать используемые параметры gzip, чтобы я мог убедиться, что мои манипуляции не испортили содержимое файлов?

2 ответа2

2

Все эти утилиты содержат некоторую метаинформацию, которая может меняться при каждом запуске, поэтому даже с одинаковыми файлами вы получаете несколько разные ZIP-файлы (и, следовательно, разные MD5). Для сравнения содержимого вы должны распаковать их.

Если вы посмотрите GZIP в Википедии, вы узнаете, что файл GZip начинается с 10-байтового заголовка, содержащего магическое число (1f 8b), номер версии и метку времени. Другими словами, каждый прогон гарантированно дает другой файл.

2

Стандартная file утилита Unix дает вам некоторую базовую информацию о файле .gz, например:

$ file foo.gz
foo.gz: gzip compressed data, was "foo", from Unix, last modified: Tue Aug  1 14:19:21 2017, max compression

Как видите, в заголовке хранится исходное имя файла, ОС, в которой было выполнено сжатие, время модификации и уровень сжатия. Обратите внимание, что исходное имя файла может отличаться, если вы сделали что-то вроде gzip -c tempfile > foo.gz , и в этом случае исходное имя файла будет tempfile . Или он может даже не существовать, если gzip не получил оригинальное имя файла, потому что он читал из потока (например, tar czf foo.tar.gz somedir).

Таким образом, вы, вероятно, хотите получить представление о том, какие факторы могут отличаться в первую очередь. Я не знаю, насколько все это действительно важно для вас, но вы можете взглянуть на RFC 1952, который дает формат файла. Вы можете попробовать разные настройки и даже отредактировать в шестнадцатеричном виде некоторые поля, чтобы они соответствовали полям инициатора (например, для другой ОС).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .