У меня есть два файла 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
.
Сценарий оболочки должен возвратиться хорошо для файлов с теми же контрольными суммами и ЛОЖЬЮ для тех, которые не являются, наряду с именами файлов.
Может это быть сделанным с помощью md5sum --check
(так как это обычно проверяет на какие-либо изменения только в 1 файле MD5)?
Я хочу знать, может ли это быть сделано с помощью
md5sum --check
? (так как это обычно проверяет на любые изменения только в 1 файле MD5).
Нет, это не может.
md5sum --check
предназначен, чтобы считать путь к каждому файлу во втором столбце входных файлов и проверить их контрольную сумму MD5 agains контрольная сумма, о которой сообщают относительно первого столбца; если Вы хотите непосредственно сравнить контрольные суммы в этих двух файлах, необходимо будет сравнить текстовые файлы.
Используя paste
+ AWK Вы могли сделать:
paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
paste file1 file2
: строка соединений N file1
на строке N file2
;awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
: если первое поле равно третьему полю (т.е. соответствие сумм MD5), присваивается "хорошо" к x
, иначе присваивает "ЛОЖЬ" x
и печатает второе поле (т.е. имя файла) сопровождаемый значением x
.% cat file1
5f31caf675f2542a971582442a6625f6 /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreator/hash3.txt
% cat file2
163559001ec29c4bbbbe96344373760a /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreators/hash3.txt
% paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
/root/md5filescreator/hash1.txt FALSE
/root/md5filescreator/hash2.txt OK
/root/md5filescreator/hash3.txt OK
Простой способ проверить это состоял бы в том, чтобы видеть, какие строки не дублированы через оба файла:
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}'
Или, полностью в awk:
awk -F/ 'FNR == NR {hash[$NF] = $1; next} hash[$NF] != $1 {print $NF}'
В обоих случаях, Вы получаете просто имена файлов, хеши которых отличаются.