diff コマンド

目的

テキスト・ファイルを比較します。

構文

2 つのファイルの内容を比較する

差分 [ 「-c」| -C | -D [ ストリング ] | -e (E) | 「-f」 | N | -ウー | -U (U) ] [ -b (B) ] [ I ] [ T ] [ -w (W) ] File1 File2

diff [ -h ] [ -b ] File1 File2

ディレクトリーの内容をソートし、相違点のあるファイルを比較する

差分 [ 「-c」 | -C | -e (E) | 「-f」 | N | -ウー | -U (U) ] [ -b (B) ] [ I ] [ - ] [ - ] [ -s ] [ -S (S) ファイル ] [ T ] [ -w (W) ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

説明

diff コマンドはテキスト・ファイルを比較します。 このコマンドは、ファイルまたはディレクトリーの内容を比較することができます。
注: diff コマンドは、テキスト・ファイルである入力ファイルでのみ機能します。

Directory1Directory2 の両パラメーターを指定すると、diff コマンドは両方のディレクトリー内の同じ名前を持つテキスト・ファイルを比較します。 異なっているバイナリー・ファイル、共通サブディレクトリー、およびどちらか 1 つのディレクトリーのみにあるファイルが出力されます。

diff コマンドが通常のファイルに対して実行されている場合で、 ディレクトリーの比較の際に異なるテキスト・ファイルを比較した場合、diff コマンドは 両者が一致するには、ファイル内のどの行を変更しなければならないかを 知らせます。 File1 パラメーター または File2 パラメーターのどちらもディレクトリーでない場合は、 どちらかに - (ハイフン) を指定して、標準入力を 使用することができます。 File1 パラメーターがディレクトリーである場合、 そのディレクトリー内では、File2 パラメーターと同じファイル名のファイルが使用されます。

典型的な出力には、次のようなフォーマットの行が含まれます。

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

これらの行は、 File1File2に変換する ed サブコマンドに似ています。 アクション文字の前の番号は File1 に属し、アクション文字の後の番号は File2 に属します。 したがって、ad と入れ換えて右から左へ読むと、File2File1 に変換する方法も分かります。 ed コマンドのように、同一の組み合わせ (この場合は Number1 = Number2) は、1 つの番号として略記されます。

diff コマンドは、上記の各行に続けて、最初のファイル内で影響を受けるすべての行を、先頭に <: (小なり記号とコロン) を付けて表示し、その次に 2 番目のファイル内で影響を受けるすべての行を、先頭に > (大なり記号) を付けて表示します。

終了値 0 は相違がなかったことを、1 は相違が見つかったことを意味し、2 はエラーを意味します。

注: 複数の -c-C-D-e-f、または -n-u、または -U フラグを指定すると、コマンド行の最後のフラグが優先されます。 エラー・メッセージは表示されません。

フラグ

項目 説明
-b 行の終わりのホワイト・スペースはその長さに関係なく単一改行文字として処理され (改行文字の前にあるホワイト・スペースは無視されます)、改行文字を含まないホワイト・スペース文字の他の文字列は等しく比較されるようにします。
-C Lines 変数で指定された値と等しい コピーされた コンテキストの行数との diff コマンドによる比較を生成します。 -c フラグは出力を若干変更します。 出力は、関係するファイルの ID とファイルの作成日で始まります。 各変更は、1 行 (1 ダース) で区切られます。*(アスタリスク) を使用します。 File1 から除去された行は、-(負符号) File2 に追加されたものは、+(正符号)。 一方のファイルから他方のファイルに変更された行は、両方のファイルで以下のようにマークされます。!(感嘆符) を置きます。 相互の指定されたコピー済みコンテキスト行内にある変更については、グループ化されて出力されます。
-c 3 行の コピーされた コンテキストとの diff コマンドによる比較を生成します。 -c フラグは出力を若干変更します。 出力は、関係するファイルの ID とファイルの作成日で始まります。 各変更は、1 行 (1 ダース) で区切られます。*(アスタリスク) を使用します。 File1 から除去された行は、-(負符号) File2 に追加されたものは、+(正符号)。 一方のファイルから他方のファイルに変更された行は、両方のファイルで以下のようにマークされます。!(感嘆符) を置きます。 相互の指定されたコピーのコンテキスト行内での変更内容は、グループ化されて出力されます。
-D [ ストリング ] diff コマンドに、標準出力上で File1File2 を組み合わせたバージョンを作成させます。 C プリプロセッサー制御が含まれ、これにより String を定義しないで結果をコンパイルすることは File1 をコンパイルすることと等価になります。String を定義すると File2 になります。
-e ed エディターを使って File1File2 に変換するのに適したフォーマットで出力を行います。 このフラグを使用すると、次のシェル・プログラムによって、ファイルの複数のバージョンの保守を簡易化します。 必要なのは、発生源ファイル ($1) と、diff コマンドによって作成された一連のバージョン間 ed スクリプト ($2, $3, ...) だけです。 最新バージョンは標準出力に表示されます。
(shift; cat $*; echo '1,$p') | ed - $1
-e フラグがディレクトリーの比較に使用される場合は、 追加のコマンドが出力に追加されます。したがって、 結果は、2 つのディレクトリーに共通するテキスト・ファイルを Directory1 での 状態から Directory2 での状態へ変換するためのシェル・スクリプトになります。
注: -e または -f フラグによって作成されたスクリプトを編集しても、単一の行を作成することはできません。 (ピリオド) です。
-f File1 File2 に変換するために必要な変更を -e フラグで作成された順序と逆の順序で示す、 ed エディターでの使用に適さない形式で出力を生成します。
-h 変更されたセクションが短く、正しく区切られている場合に、より速くなる可能性がある代替比較を実行します。 -h フラグはどのような長さのファイルでも動作します。 -c-C-D-e-f、および -n の各フラグは -h フラグと一緒には使用できません。 -b フラグを除く他のフラグはすべて、-h フラグと一緒に使用した場合、無視されます。
-i 大文字と小文字の区別を無視します。 例えば、小文字の a は、 大文字の A と同じものとして扱われます。
-l 長い出力フォーマット。 diff コマンドのテキスト・ファイルの比較結果はそれぞれ、pr コマンドにパイプ接続され、伝搬されます。 テキスト・ファイルの相違がすべて報告されてから、他の相違が記憶され、要約されます。
-n -e フラグの出力と類似した出力を生成しますが、順序は逆で、個々の挿入または削除コマンドで変更された行の数を伴います。 これは、リビジョン・コントロール・システム (RCS) によって使用されるフォーマットです。
-r よく出てくるサブディレクトリーに diff コマンドを再帰的に適用します。
-s ファイルが同じである場合は報告します。同じでない場合は、報告しません。
-S [ ファイル ] ディレクトリーの比較を行うときに、File 変数によって指定されたファイルの前にあるファイル名を無視します。 -S フラグは Directory1 パラメーターと Directory2 パラメーターで指定されたディレクトリーだけに適用されます。 -r フラグを -S フラグと一緒に指定すると、-S フラグは、Directory1 サブディレクトリーと Directory2 サブディレクトリーで再帰的に機能しません。
-t 出力行のタブを拡張します。 典型的な出力または -c フラグ出力は、各行の先頭に文字を追加します。これは、元のソース行のインデントに影響を与える可能性があり、出力リストの解釈を難しくする場合があります。 このフラグは、のソースのインデントを保持します。
-u 3 行の統合されたコンテキストとの diff コマンドによる比較を生成します。

この出力は -c フラグの出力と似ていますが、コンテキスト行は繰り返されません。その代わりに、コンテキスト行、削除された行、および追加された行が混ざり合って表示されます。

-U Lines 変数で指定された値と等しい、統合されたコンテキストのいくつかの行との diff コマンド比較を生成します。 この出力は -c フラグの出力と似ていますが、コンテキスト行は繰り返されません。その代わりに、コンテキスト行、削除された行、および追加された行が混ざり合って表示されます。
-w スペースとタブ文字をすべて無視します。 その他のブランク文字列もすべてブランク文字がないものと同様に扱います。 例:if ( a == b )等しく比較するif(a==b).

終了状況

このコマンドは、以下の終了値を戻します。

項目 説明
0 相違は見つかりませんでした。
1 相違が見つかりました。
>1 エラーが発生しました。

  1. 2 つのファイルを比較するには、以下を入力します。
    diff chap1.back chap1
    これにより、ファイル間の相違が表示されます。chap1.bakおよびchap1.
  2. 空白の量の違いを無視して 2 つのファイルを比較するには、次のように入力します。
    diff  -w prog.c.bak prog.c
    2 つの行の相違がワード間のスペースとタブの数だけである場合、diff -w コマンドはその 2 つの行を同じであると判断します。
  3. あるファイルを別のファイルから再構成するために ed コマンドが使用できるコマンドを含むファイルを作成するには、次のように入力します。
    diff  -e chap2 chap2.old >new.to.old.ed
    これにより、次のファイルが作成されますnew.to.old.ed変更する ed サブコマンドが含まれているchap2テキストのバージョンに戻ります。chap2.oldほとんどの場合、new.to.old.edよりもはるかに小さいファイルです。chap2.old. 削除することによってディスク・スペースを節約することができます。chap2.oldまた、次のように入力することにより、いつでも再構成することができます。
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    括弧内のコマンドが追加されます。1,$ped エディターに送信された編集コマンドの末尾に追加します。 この1,$p ed コマンドは、編集後にファイルを標準出力に書き出します。 この変更されたコマンド・シーケンスは、 ed コマンドにパイプ接続されます。| ed) を入力すると、エディターはそれを標準入力として読み取ります。 - フラグを指定すると、 ed コマンドはファイル・サイズおよびその他の追加情報を表示しません。これは、chap2.old.

ファイル

項目 説明
/usr/bin/diff diff コマンドが入っています。