名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 注意事項
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] [-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)' と同じとみなします。
次のオプションは相互に排他的です。 したがって同時に 2 つ以上指定しないでください。
差異行の前後 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 では使えない) を反対順に生成します。
高速でおおまかな処理をします。 変更部分が短くてうまく区切られているときのみ動作しますが、 ファイル長には制限がありません。オプション -c 、 -C、-e 、 -f および -n は、このオプションと一緒に使用できません。 このオプションを指定した場合、 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 のうちどちらか一方だけがディレクトリの場合、 diff が比較するのは、ディレクトリでない方のファイルの内容と、 当該ディレクトリ中のファイルのうち名前がディレクトリでない方の ファイル名の最終要素と同一のファイルの内容です。
ファイルが 2 ギガバイト ( 231 バイト) 以上ある場合の diff の動作については、 largefile(5) を参照してください。
次のコマンドでは、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 の実行に影響を与える環境変数 LC_CTYPE、 LC_MESSAGES、 LC_TIME 、 NLSPATH についての詳細は、 environ(5) を参照してください。
-C または -c オプションで出力される時刻表示 のタイムゾーン ( 時間帯 ) に影響を与えるロケールを指定します。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ |
属性値 |
---|---|
使用条件 |
SUNWesu |
CSI |
対応済み |
インタフェースの安定性 |
標準 |
bdiff(1), cmp(1), comm(1), dircmp(1), ed(1), pr(1), sdiff(1), attributes(5), environ(5), largefile(5), standards(5)
オプション -e または -f 指定で生成される編集用スクリプトは、 ピリオド (.) だけからなる行の作成に関しては慎重です。
Missing NEWLINE at end of file は、問題のファイルの最終行に復帰改行がないことを意味します。 最終行に差異がある場合、フラグが付けられて出力されます。 しかし、出力には差異がないように見えます。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 注意事項