diff 同じファイルか? 違うファイルか? 調べる方法

diffコマンドで同じかどうか?違うかどうか?を結果のみ表示する

diffコマンドでファイルが同一かどうか?違うファイルかどうか?等で使用しますが、通常違うファイルの場合下記のような表示になります

$ cat test01.txt
ABCDEF
ASDFGG
$ cat test02.txt
ABCDEF
ASDFGG
XCNVRR
$ diff test01.txt test02.txt
2a3
> XCNVRR

違う箇所を表示するのでなく、「同じファイルです」・「違うファイルです」など簡易表示する方法を紹介します

diffコマンドで同じファイルの場合も報告する

diffコマンドで同じファイル場合は何も表示されないですが、これを同じ場合でも画面に結果を出力するようには、「-s」のオプションを利用します。

$ cat test01.txt
ABCDEF
ASDFGG
$ cat test011.txt
ABCDEF
ASDFGG

# オプションなしだと何も表示されません
$ diff test01.txt test011.txt
# 「-s」オプションを同じファイルでも結果が出力されます
$ diff -s test01.txt test011.txt
ファイル test01.txt と test011.txt は同一です

diffコマンドで違うファイルの場合は差分を表示せず結果のみを報告する

diffコマンドで違うファイルの場合は差分内容が下記のように表示されます。

$ cat test01.txt
ABCDEF
ASDFGG
$ cat test02.txt
ABCDEF
ASDFGG
XCNVRR
$ diff test01.txt test02.txt
2a3
> XCNVRR

これを差分を表示せず結果のみを表示する場合は「-q」のオプションを使用します
$ diff -q test01.txt test02.txt
ファイル test01.txt と test02.txt は異なります

diffコマンドの戻り値について

diifコマンドで戻り値ですが下記のように、同じ場合は「0」、違う場合は「1」、エラーの場合は「2」と処理されます。これを利用してシェルスクリプトでファイルの内容が違う場合はコピーする等の処理ができます

  • 0: 変更なし
  • 1: 変更あり
  • 2: エラー

下記では、「test01.txt」と 「test011.txt」は同一ファイルです。「test01.txt」と 「test02.txt」は違うファイルです。その場合diffコマンドの戻り値は以下のようになります。同じファイルの場合や違うファイルの場合で処理を分けることができます

$ cat test2.sh
#!/bin/bash

diff -s test01.txt test011.txt
echo "変更なし:$?"
diff -q test01.txt test02.txt
echo "変更あり;$?"

diff -s test01.txt test011.txt > /dev/null 2>&1
if [ $? -eq 0 ]; then
  echo "同じファイルです"
elif [ $? -eq 1 ]; then
  echo "違うファイルです"
fi

$ sh test2.sh
変更なし:0
ファイル test01.txt と test02.txt は異なります
変更あり;1
同じファイルです

 

スポンサーリンク