我需要通过脚本来比较两个文件的内容,如果内容不同,则执行另一个脚本,但是内容相同则不执行任何操作。我尝试过使用 DIFF 命令,但似乎无法让它工作。谁能提供一种简单的方法来执行此任务?
答案1
您可以使用diff
或cmp
。对于直接比较,我更喜欢cmp
:
cmp -s "$file1" "$file2" || otherscript.sh
答案2
diff file1 file2
将完全完成您所要求的任务(尽管我怀疑您实际上正在尝试完成比您所描述的更高级的事情)。diff
如果它们的文件相同,将返回 0 退出状态;如果它们不同,则返回非零退出状态。如果在脚本中使用它,您可能希望重定向输出,这样它就不会打印出差异。
if ! diff "$file1" "$file2" > /dev/null; then
# test evaluated to False (1), so the files are different
bash otherscript.sh
fi
答案3
使用哈希代替:
HASH_VALUE_1=$(sha1sum file1 | cut -c 1-40)
HASH_VALUE_2=$(sha1sum file2 | cut -c 1-40)
if [[ "$HASH_VALUE_1" == "$HASH_VALUE_2" ]]
then
# your code
else
# your code
fi
上面是针对 bash 编写的。
答案4
如果您想比较文本文件,并排选项对于显示差异非常有用。使用
diff -y -a <filea> <fileb>
然后(-y 表示 ascii 文件)。
如果您只需要知道文件的任何字节(二进制)是否不同,那么使用
diff -q <file1> <file2>
无论如何,如果文件相同,则 diff 返回 0。