Я пытаюсь сравнить список файлов в двух репозиториях, чтобы попытаться пометить, какие из них изменились.Проблема в том, что мой код говорит, что все они разные.Но проверка каждого хеш-дайджеста показывает, что многие дайджесты идентичны.
while IFS= read -r filename;
do
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# inspecting the digest of each file individually #
# shows many files are identical and so are the digests #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
md5 old/$filename; # a456cca87913a4788d980ba4c2f254be
md5 new/$filename; # a456cca87913a4788d980ba4c2f254be
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# the below conditional is only supposed to echo "differs" #
# if the two digests are different #
# but, instead, it echoes "differs" on every file comparison #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
[[ $(md5 old/$filename) = $(md5 new/$filename) ]] || echo differs; # differs
done < files-to-compare.txt
Как я могу исправить эту ошибку и получить только те файлы, которые отличаются в отчете?
Редактировать
Кроме того, обратите внимание, что использование ==
вместо =
, как в
$(md5 old/$filename) == $(md5 new/$filename) ]] || echo differs;
, приводит к точно таким же ошибочным выводам.
Edit2
Комментарий предлагает использовать кавычки.Это также не работает.
"$(md5 old/$filename)" == "$(md5 new/$filename)" ]] || echo differs;