我需要一个函数来比较两个二进制文件,这里的要求:
- 2 个文件,而不是 3 或 4 个
- 不能假设文件存在
- 避免运行校验和(CRC/MD5/SHA/...),直到必须
- 如果运行多个校验和,请从最便宜到最昂贵(上面的顺序)
- 打印出有意义的错误消息
- 用法:binary_compare_two_files file1 file2
这就是我所得到的,我认为它可以做得比这更好。如何?
#!/bin/bash
function binary_compare_two_files() {
REQUIRED_ARGUMENTS=2
n_arguments="$#"
if [ ! "${n_arguments}" -eq $REQUIRED_ARGUMENTS ]; then
printf 'Invalid number of arguments. Required: %d, supplied: %d\n' \
$REQUIRED_ARGUMENTS $n_arguments
echo 'usage: binary_compare_two_files file1 file2'
return
fi
file1="${1}"
file2="${2}"
if [ ! -f "${file1}" -o ! -f "${file2}" ]; then
echo 'Invalid arguments. Both arguments need to refer to existing files.'
return
fi
file1_size=$(stat -f "%z" "${file1}")
file2_size=$(stat -f "%z" "${file2}")
if [ ! ${file1_size} -eq ${file2_size} ]; then
return $((file1_size - file2_size))
fi
file1_md5=$(md5 -q "${file1}")
file2_md5=$(md5 -q "${file2}")
if [ ! "${file1_md5}" == "${file2_md5}" ]; then
return -1
fi
return 0
}
我选择不使用 diff/bdiff 因为我不确定这些是否stat
并且首先检查大小......我需要查看 src。
答案1
#!/bin/bash
diff -u $1 $2 > /dev/null
if [[ $? -eq 0 ]] ;then
echo "They are equal!"
else
echo "They aren't equal!"
fi;
当然,我没有测试argument是否免费。你可以自己测试。
享受那个....