
두 개의 바이너리 파일을 비교하는 기능이 필요합니다. 요구 사항은 다음과 같습니다.
- 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;
물론, 나는 논쟁이 자유로운지 여부를 테스트하지 않았습니다. 직접 테스트해 볼 수 있습니다.
그것을 즐겨라....