diff - 2 つのファイルの比較
diff [-bitw] [-c | -e | -f | -h | -n | -u] file1 file2
diff [-bitw] [-C number | -U number] file1 file2
diff [-bitw] [-D string] file1 file2
diff [-bitw] [-c | -e | -f | -h | -n | -u] [-l] [-r] [-s] [-S name] directory1 directory2
diff ユーティリティーは file1 と file2 で指定された 2 つのファイルの内容を比較し、file1 を file2 に一致させるのに必要な変更リストを標準出力に書き込みます。変更リストの大きさは最小限に留められます。ごくまれな場合を除き、diff は、必要最低限の差異を生成するようにします。2 つのファイルの内容が同一であれば、何も出力しません。
通常は、次のようなフォーマットの行を出力します。
n1 a n3,n4 n1,n2 d n3 n1,n2 c n3,n4
このうち n1 と n2 は file1 中の行を表し、 n3 と n4 は file2 中の行を表します。 これらの行は file1 を file2 へ変換するための ed(1) コマンドに似ています。 a と d とを入れ替えて、各出力行の内容を右から左へ逆向きに読めば、 file2 を file1 に変換する方法が確認できます。 ed の場合と同様に、一致するペアは n1=n2 または n3 = n4 のようになり、1 つの番号に省略されます。
最初のファイルで影響を受けた行には、 ` < ' が付きます。 2 番目のファイルで影響を受けた行には、 ` > ' が付きます。
サポートしているオプションは、次のとおりです。
末尾のスペース ( スペースとタブ文字 ) を無視し、 他のスペース列は等価に扱います。
大文字、小文字の区別を無視します。たとえば、 A と a は等しいとみなします。
タブ文字を出力行上で展開します。 通常または –c による出力は、各行の先頭に文字を追加するので、元の行のインデントに悪影響を与え、結果として出力行を読みにくくします。このオプションは、元の行のインデントを保持します。
すべてのスペース ( スペース文字とタブ文字 ) を無視し、他のスペース文字は等価に扱います。たとえば、`if ( a = = b )' は `if(a= =b)' と同じとみなします。
次のオプションは相互に排他的です。
差異行の前後 3 行を追加して出力します。このオプションを使用すると、出力フォーマットが多少変わります。つまり、出力はファイルの ID と作成日で始まり、各差異部分は * からなる行で区切られます。file1 から削除された行には「—」が付きます。file2 に追加された行には + が付きます。1 つのファイルから他のファイルへ変更された行には、 双方のファイルに「 ! 」が付きます。
基本的に –c オプションと同じです。差異行の前後 number 行を追加して出力します。
C のプリプロセッサの制御によって file1 と file2 のマージ版を作成します。string を定義しないでコンパイルすると file1 のコンパイル結果と同等になり、string を定義すると、file2 を生成します。
file1 から file2 を再生するために、エディタ ed の a、c、d コマンドのスクリプトを生成します。次のシェルプログラムは、この –e オプションを使用して、複数版のファイルを管理するものです。元のファイル ($1) と diff によって作成される版から版への ed スクリプト ($2,$3,...) だけが必要です。最新版が標準出力へ表示されます。
(shift; cat $*; echo ´1,$p') | ed − $1
類似したスクリプト( ed では使えない) を反対順に生成します。
高速で単調な処理を行います。
このオプションが有効に機能するのは、変更範囲が小さく、十分に区分されている場合です。無限長のファイルでは機能しません。
h– とともに使用できるのは -–b だけです。
このオプションを指定した場合、 diff はディレクトリの下の階層を処理しません。
–e と同様のスクリプトを生成しますが、順序は反対で、 各挿入または削除コマンドに変更行数を出力します。
差異行の前後 3 行を追加して出力します。–c オプションと似ていますが、u オプションの場合、文脈が統合されて出力されます。つまり、file1 で削除または変更された行には - が付き、file2 で追加または変更された行には + が付きます。そして、変更された行は両方のファイルとも出力されますが、追加、削除、および同一の行は 1 度だけ出力されます。また、file1 と file2 の分別も異なります。–c オプションの場合は *** と --- が出力されますが、-u オプションの場合は --- と +++ が出力されます。変更された行はそれぞれ次のような行で分離されます。
@@ -n1,n2 + n3,n4 @@
出力形式は –u オプションと同じですが、出力する文脈の行数が number になります。
次のオプションは、ディレクトリを比較するのに使用します。
ロングフォーマットで出力を生成します。 diff で処理する前に、各テキストファイルは pr(1) によってページ付けされます。他の差異は記憶され、 すべてのテキストファイルの差異が報告された後で集計されます。
サブディレクトリに出合うと、 diff を再帰的に実行します。
同一のファイルを報告します。そうしないと、同一のファイルは報告されません。
ファイル name からディレクトリ diff を開始します。
次のオペランドがサポートされています。
比較するファイルまたはディレクトリのパス名。 file1 と file2 のどちらかに - を指定すると、そのファイルの代わりに標準入力が使用されます。
比較するディレクトリのパス名
file1 と file2 のうちどちらか一方だけがディレクトリの場合、diff が比較するのは、ディレクトリでない方のファイルの内容と、当該ディレクトリ中のファイルのうち名前がディレクトリでない方のファイル名の最終コンポーネントと同一のファイルの内容です。
次のコマンドでは、dir1 がディレクトリで x という名のディレクトリを含んでいて、 dir2 もディレクトリで x という名のディレクトリを含んでいて、 dir1/x と dir2/x の両方が date.out というファイルを含んでいて、さらに dir2/x が y というファイルを含んでいると仮定します。 以下のような出力が生成されます。
example% diff -r dir1 dir2 Common subdirectories: dir1/x and dir2/x Only in dir2/x: y diff -r dir1/x/date.out dir2/x/date.out 1c1 < Mon Jul 2 13:12:16 PDT 1990 --- > Tue Jun 19 21:41:39 PDT 1990
diff の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、LC_TIME、および NLSPATH。
–C または –c オプションで出力される時間表示 のタイムゾーン ( タイムゾーン ) に影響を与えるロケールを指定します。
次の終了ステータスが返されます。
違いは見つかりませんでした。
違いが見つかりました。
エラーが発生しました。
比較に用いる一時ファイル
–h オプション用の実行可能ファイル
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
sdiff(1), bdiff(1), cmp(1), comm(1), dircmp(1), ed(1), pr(1), attributes(7), environ(7), standards(7)
オプション –e または –f 指定で生成される編集用スクリプトは、 ピリオド (.) だけからなる行の作成に関しては慎重です。
Missing NEWLINE at end of file は、問題のファイルの最終行に復帰改行がないことを意味します。 最終行に差異がある場合、フラグが付けられて出力されます。しかし、出力には差異がないように見えます。