У меня есть один успешно загруженный файл, а другой не удалось загрузить (только первые 100 МБ большого файла), который, как я подозреваю, является тем же файлом.
Чтобы проверить это, я хотел бы проверить их хэши, но, поскольку у меня есть только часть неудачно загруженного файла, я хочу хэшировать только первые несколько мегабайт или около того.
Как мне это сделать?
ОС будет Windows, но у меня установлены Cygwin и MinGW.
Ответы:
Создание хэшей для сравнения файлов имеет смысл, если вы сравниваете один файл со многими или сравниваете много файлов друг с другом.
Это не имеет смысла при сравнении двух файлов только один раз: усилия по вычислению хэшей, по крайней мере, не уступают просмотру файлов и их прямому сравнению.
Эффективный инструмент сравнения файлов
cmp
:Вы также можете комбинировать его с тем,
dd
чтобы сравнивать произвольные части (не обязательно с начала) двух файлов, например:источник
cmp
на 99,99% уверен, что он уже установлен, если онbash
запущен, и он выполняет свою работу. Действительно,cmp -n 131072 one.zip two.zip
тоже сделаю эту работу. Наименьшее количество символов для ввода и быстрое исполнение. Вычисление хэша бессмысленно. Требуется чтение всего файла размером 100 МБ , плюс часть файла размером 100 МБ, что бессмысленно. Если это zip-файлы и они разные, в первых нескольких сотнях байтов будет разница. Readahead предоставляет по умолчанию 128 КБ, так что вы также можете сравнить 128 КБ (такая же стоимость, как при сравнении 1 байта).--bytes
Опция только усложняет задачу. Просто запуститеcmp
без этой опции, и он покажет вам первый байт, который отличается между файлами. Если все байты одинаковы, это будет показаноEOF
в более коротком файле. Это даст вам больше информации, чем ваш пример - сколько байтов правильное.cmp
(и, как мне кажется, почти у всех), вы можете использовать аргументы--ignore-initial
и--bytes
аргументы вместо того, чтобы усложнять вызовыdd
.Мне жаль, что я не могу это попробовать, но этот способ сработает
Это даст вам первые 100 мегабайт обоих файлов.
Теперь получите хэши:
Вы также можете запустить его напрямую:
источник
cmp
).cmp
) является победителем без сомнения. Но этот способ решения проблемы (с использованием хэшей) также имеет право на существование, если он действительно решает проблему (:Кажется, что все идут по пути Unix / Linux с этим, но просто сравнить 2 файла можно легко с помощью стандартных команд Windows:
FC /B file file2
ФК присутствует на всех версиях Windows NT. И (если я правильно помню) также присутствовал в DOS.
Это немного медленно, но это не имеет значения для одноразового использования.
источник
Вы можете просто напрямую сравнивать файлы с помощью бинарной / шестнадцатеричной программы сравнения
vbindiff
. Он быстро сравнивает файлы до 4 ГБ в Linux и Windows.Выглядит примерно так, только с разницей, выделенной красным (1B против 1C):
источник
vbindiff
(и Конрадаcmp
) сравнивает двоичные данные, байт за байт. На самом деле значения имеют гораздо большую вероятность столкновенияЯ знаю, что это говорит о Bash, но OP также утверждает, что у них есть Windows. Для тех, кто хочет / требует решения Windows, есть программа HxD, которая представляет собой Hex Editor, который может сравнивать два файла. Если файлы разных размеров, он скажет, совпадают ли доступные части. И если необходимо, он может запускать контрольные суммы для того, что в данный момент выбрано. Это бесплатно и может быть загружено с: веб-сайта HxD . У меня нет никакой связи с автором (ами), я просто использую это в течение многих лет.
источник
cmp сообщит вам, когда два файла идентичны, вплоть до длины меньшего файла:
cmp сообщает вам, что сравнение обнаружило EOF в файле a, прежде чем обнаружило разницу между этими двумя файлами.
источник