Как сравнить два файла, содержащие несколько контрольных сумм md5, для определения измененных файлов?

У меня есть два файла MD1 и MD2.

MD1 содержит md5sums:

5f31caf675f2542a971582442a6625f6  /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30  /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01  /root/md5filescreator/hash3.txt

, где hash1, hash2 и hash3 три файла, присутствующие в папке md5filescreator.

Аналогично MD2 содержит:

163559001ec29c4bbbbe96344373760a  /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30  /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01  /root/md5filescreators/hash3.txt

, где эти файлы находятся в папке md5filescreators.

Я хочу сравнить контрольные суммы в md5filescreator с контрольной суммой соответствующего файла в md5filecreators.

Сценарий оболочки должен возвращать ОК для файлов с одинаковыми контрольными суммами и FALSE для тех, которые не являются вместе с файлом имена.

Можно ли это сделать с помощью md5sum --check (поскольку он обычно проверяет любые изменения только в одном файле MD5)?

1
задан 15 March 2016 в 21:15

1 ответ

Простым способом проверки этого было бы увидеть, какие строки не дублируются в обоих файлах:

sort file1 file2 | uniq --unique

uniq --unique печатает те строки, которые еще не появились. Соответственно, те файлы, чей совпадение хэшей будет иметь дублированные строки и не будут отображаться на выходе. Чтобы просто проверить, создан ли какой-либо вывод, используйте grep:

sort file1 file2 | uniq --unique | grep -q .

В этом случае, поскольку каталоги различны, требуется немного больше обработки:

awk -F/ '{print $1, $NF}' | sort | uniq --unique | awk '!a[$2]++{print $2}'
[d5 ] Или, полностью в awk:

awk -F/ 'FNR == NR {hash[$NF] = $1; next} hash[$NF] != $1 {print $NF}'

В обоих случаях вы получаете только имена файлов, чьи хэши отличаются.

2
ответ дан 23 May 2018 в 12:51

Другие вопросы по тегам:

Похожие вопросы: