У меня есть два файла 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)?
Простым способом проверки этого было бы увидеть, какие строки не дублируются в обоих файлах:
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}'
В обоих случаях вы получаете только имена файлов, чьи хэши отличаются.