比较两个二进制文件的 Bash 函数

比较两个二进制文件的 Bash 函数

我需要一个函数来比较两个二进制文件,这里的要求:

  • 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是否免费。你可以自己测试。

享受那个....

相关内容