【发布时间】:2019-05-02 12:03:46
【问题描述】:
我正在尝试比较两个存储库中的文件列表,以尝试标记哪些文件已更改。问题是,我的代码说它们都是不同的。但是检查每个哈希摘要表明许多摘要是相同的。
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;
产生完全相同的错误输出。
编辑2
评论建议使用引号。这也行不通。
"$(md5 old/$filename)" == "$(md5 new/$filename)" ]] || echo differs;
【问题讨论】:
-
您只是缺少引号。试试
"$(md5 old/$filename)" = ... -
程序
md5来自哪里?你的意思是md5sum?什么给了你command -V md5? -
@hek2mgl:
md5是md5sum的 Mac OSX 版本。 -
如果
md5打印输入文件名,事实证明,那么这个问题非常愚蠢!我的意思是在这种情况下字符串比较应该如何工作??? (以及您问题中的示例输出如何正确或相关?)