名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 注意事項
diff ユーティリティは file1 と file2 で指定された 2 つのファイルの内容を比較し、 file1 をどのように変更すれば file2 に一致するかを出力します。 この出力リストは、量が最小限になるように抑えられます。 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 行を追加して出力します。
file1 から file2 を再生するために、 エディタ ed の a 、 c 、 d コマンドのスクリプトを生成します。 以下のシェルプログラムは、この -e オプションを使用して、複数版のファイルを保守するものです。 元のファイル ( $1 ) と diff によって作成される版から版への ed スクリプト( $2, $3, ... ) だけが必要です。最新版が標準出力へ表示されます。
(shift; cat $*; echo '1,$p') | ed - $1
ごくまれな例を除いて、 diff は差異を示すのに最小限必要な部分のみを表示します。
類似したスクリプト( ed では使えない) を反対順に生成します。
高速でおおまかな処理をします。 変更部分が短くてうまく区切られているときのみ動作しますが、 ファイル長には制限がありません。オプション -c 、 -e 、 -f および -n は、このオプションと一緒に使用できません。 このオプションを指定した場合、 diff はディレクトリの下の階層を処理しません。
-e と同様のスクリプトを生成しますが、順序は反対で、 各挿入または削除コマンドに変更行数を出力します。
C のプリプロセッサの制御によって file1 と file2 のマージ版を作成します。 string を定義しないでコンパイルすると file1 のコンパイル結果と同じになり、 string を定義すると、 file2 を生成します。
次のオプションは、ディレクトリを比較するのに使用します。
ロングフォーマットで出力を生成します。 diff で処理する前に、各テキストファイルは pr(1) によってページ付けされます。他の差異は記憶され、 すべてのテキストファイルの差異が報告された後で集計されます。
サブディレクトリに出合うと、 diff を再帰的に実行します。
同一のファイルを報告します。 このオプションを指定しなければ、同一のファイルは報告されません。
ファイル name からディレクトリ diff を開始します。
以下のオペランドを指定できます。
file1
比較するファイルまたはディレクトリのパス名。 どちらかに - を指定すると、標準入力とみなされます。
directory1
比較するディレクトリのパス名。
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) を参照してください。
TZ
-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)
オプション -e または -f 指定で生成される編集用スクリプトは、 ピリオド (.) だけからなる行の作成に関しては慎重です。
Missing NEWLINE at end of file は、問題のファイルの最終行に復帰改行がないことを意味します。 最終行に差異がある場合、フラグが付けられて出力されます。 しかし、出力には差異がないように見えます。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 注意事項