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

4 ответа4

3

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

2

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

$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 {} +
2

Возможно, вам будет интересно вывести дайджест в формате coreutils (идентично md5sum -b)

Таким образом, команда md5sum может быть:

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

или с выводом в файл

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

Внесение 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

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