gzip выдаст контрольную сумму каждого файла при задании параметров -l и -v, например:
$ echo foo > foo
$ gzip foo
$ gzip -lv foo.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 7e3265a8 Dec 10 17:37 28 4 150.0% foo
Есть ли какой-либо внешний инструмент, с помощью которого я могу получить ту же контрольную сумму?
md5sum
, cksum
и sum
выполняют аналогичную роль, но не дают совпадающий код (шестнадцатеричное число 3915528286 равно e962385e).
$ echo foo > foo
$ md5sum foo
d3b07384d113edec49eaa6238ad5ff00 foo
$ cksum foo
3915528286 4 foo
$ sum foo
00106 1
Дополнительная информация о приложении:
У нас есть файловая система со многими большими файлами, и новые файлы постоянно копируются. Некоторые из входящих файлов соответствуют уже существующим файлам, и в этом случае мы хотели бы просто жестко связать уже существующий файл, чтобы сэкономить место на диске. Для разархивированных файлов md5sum помогает нам сделать это сравнение быстро и эффективно. С другой стороны, gzip-файлы часто имеют разные md5sum для идентичных данных (из-за метки времени или владельца, что не имеет значения в этом приложении). Я заметил, что gzip предоставит контрольную сумму для внутренних данных, поэтому для двух gzip-файлов я могу просто сравнить списки контрольных сумм плюс размеры.
Я также хотел бы поддержать сравнение файла gzip с «обычным» файлом, и в этом случае мне нужна утилита, которая будет генерировать ту же контрольную сумму извне из gzip. Я предполагаю, что простое решение состоит в том, чтобы всегда сжимать простой файл перед сравнением, но это накладные расходы, которых я хотел бы избежать, поскольку наша система в настоящее время ограничена процессорным временем.