diff 同じファイルか? 違うファイルか? 調べる方法
Contents
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 同じファイルです
ディスカッション
ピンバック & トラックバック一覧
[…] diff 同じファイルか? 違うファイルか? 調べる方法 | ex1-lab […]