2つのバイナリファイルを比較するBash関数

2つのバイナリファイルを比較するBash関数

2つのバイナリファイルを比較する機能が必要です。要件は次のとおりです。

  • 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;

もちろん、私は議論が自由であるかどうかをテストしていません。自分でテストしてみてください。

それを楽しんでください...

おすすめ記事