Можете ли вы использовать OpenSSL для генерации хеша md5 или sha для каталога файлов?

12728
Kieveli

Я заинтересован в хранении индикатора целостности файла / каталога между двумя заархивированными копиями каталогов. Это около 1 ТБ данных, которые рекурсивно хранятся на жестких дисках. Есть ли способ использовать OpenSSL для генерации одного хеша для всех файлов, который можно использовать для сравнения двух копий данных или для проверки того, что данные не изменились?

0

4 ответа на вопрос

3
AaronLS

Вы можете рекурсивно сгенерировать все хэши, объединить хэши в один файл, а затем сгенерировать хеш этого файла.

Для одной команды что-то вроде `md5 -q <(find. -Type f 2> / dev / null | xargs md5 -q | sort)` хорошо работает в Bash и не требует временного файла. Измените, если ваша система использует `md5sum` вместо` md5`. Также помните, что `sort` может вести себя по-разному на разных платформах, что повлияет на окончательную контрольную сумму, если порядок отличается. Добавьте флаги как `! -name ".DS_Store" `для компонента поиска, чтобы игнорировать определенные файлы, такие как файлы .DS_Store в Mac OS X, которые могут сбрасывать контрольную сумму, так как они созданы ОС. Justin Mrkva 10 лет назад 0
2
John T

Вы не можете сделать совокупный хеш из них всех, чтобы создать один хеш, но вы можете сначала сжать их, а затем вычислить хеш:

$tar -czpf archive1.tar.gz folder1/ $tar -czpf archive2.tar.gz folder2/ $openssl md5 archive1.tar.gz archive2.tar.gz 

для рекурсивного хэширования каждого файла:

$find . -type f -exec openssl md5 {} + 
1 ТБ данных - нет места, чтобы смолить их. Есть ли способ рекурсивно генерировать хэши всех файлов? Kieveli 15 лет назад 1
да, добавил это в мой ответ. John T 15 лет назад 0
хорошая идея, но не всегда применимо. метод "найти" лучше вообще. если для tarball 'нет места':% tar -cf - folder | OpenSSL MD5 akira 14 лет назад 0
2
Rudedog

Внесение md5-суммы в tar никогда не сработает, если все метаданные (дата создания и т. Д.) Также не будут идентичными, поскольку tar хранит их как часть своего архива.

Я бы, вероятно, сделал бы сумму md5 содержимого всех файлов:

find folder1 -type f | sort | tr '\n' '\0' | xargs -0 cat | openssl md5 find folder2 -type f | sort | tr '\n' '\0' | xargs -0 cat | openssl md5 
2
c-tools

You should be probably interested to output the digest in coreutils format (identical to md5sum -b)

So md5sum command could be :

find . -path '*/.svn' -prune -o -type f -print0 | sort | tr '\n' '\0' | xargs -0 openssl dgst -md5 -r 

or with an output to a file

find . -path '*/.svn' -prune -o -type f -print0 | sort | tr '\n' '\0' | xargs -0 openssl dgst -md5 -r > ../mydigest.md5