두 바이너리 파일을 비교하는 Bash 함수

두 바이너리 파일을 비교하는 Bash 함수

두 개의 바이너리 파일을 비교하는 기능이 필요합니다. 요구 사항은 다음과 같습니다.

  • 3개나 4개가 아닌 2개의 파일
  • 파일이 존재한다고 가정할 수 없습니다.
  • 필요할 때까지 체크섬(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;

물론, 나는 논쟁이 자유로운지 여부를 테스트하지 않았습니다. 직접 테스트해 볼 수 있습니다.

그것을 즐겨라....

관련 정보