DIFF(1) — UNIX Programmer’s Manual
名称
diff − ファイルおよびディレクトリの比較プログラム
形式
diff [ −l ] [ −r ] [ −s ] [ −cefhn ] [ −biwt ] [ −Sname ] dir1 dir2
diff [ −cefhn ] [ −biwt ] file1 file2
diff [ −Dstring ] [ −biw ] file1 file2
解説
引数がディレクトリである場合には、 diff は名前でディレクトリの内容をソートしたのちに、テキストファイルに対して、 通常のファイルの比較アルゴリズム(後述)を実行します。 相違のあるバイナリファイル、共通のサブディレクトリ、 および片方のディレクトリだけにあるファイルがリスト表示されます。 ディレクトリの比較に使用できるオプションは次のとおりです。
−l ロングフォーマットで出力します。各テキストファイルの相違は、ページ付けるために pr(1) を介してパイプされ、他の相違は記憶されてテキストファイルの相違がすべて 報告されてから、その要約が表示されます。
−r 共通のサブディレクトリに対して diff が再帰的に適用されます。
−s 相違のないファイル(全く同じ)も diff に報告させます。
−Sname
ディレクトリの比較を先頭からではなく、 指定された name のファイルから開始します。
通常のファイルに対して実行するとき、 またはディレクトリの比較で相違のあったテキストファイルを比較するときには、 diff は、2つのファイルが一致するためには、 ファイル内のどの行を変更しなければならないかを報告します。 ごく希な状況にある場合を除いては、 diff によって検出されるファイルの相違は、それほど多くはなりません。 file1 と file2 のいずれもディレクトリでなければ、いずれかに‘−’を指定することができ、 その場合には、標準入力が使用されます。 file1 がディレクトリである場合には、そのディレクトリ内で file2 と同じファイル名を持つファイルが使用されます(逆の場合も同様)。
出力形式を指定するためのオプションがいくつかありますが、デフォルトは、 次のような形式の出力になります。
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
これらの行は、 file1 を file2 に変換する ed コマンドに似ています。文字のあとにある数字は、 file2 の行数です。実際に、‘a’を‘d’と交換し、逆方向に読んでみることによって、 file2 を file1 に変換する方法も同様に確かめることができます。 ed の場合と同様に、 n1 = n2 または n3 = n4 である同じペアは、単一の数字として短縮表現されます。
これらの各行のあとには、‘<’で示される第1のファイル内で影響されるすべての行、 次いで‘>’で示される第2のファイル内で影響されるすべての行がきます。
以下のオプションは、他のオプションと共に使用できる −b、 −w、 −i、 −t オプション以外はすべて相互排他的になっています。
−e エディタ ed のために、 a および、 c、 d コマンドのスクリプトを作成して、 ed が file1 から file2 を再作成できるようにします。 −e と共に、次のシェルプログラムは、 ファイルの複数のバージョンを維持するのに役立ちます。 先祖ファイル($1)と diff によって作られた一連のバージョン間 ed スクリプト($2,$3,...)だけが必要とされます。 ‘最新のバージョン’が標準出力に表示されます。
(shift; cat $∗; echo ´1,$p´) │ ed − $1
−e を用いてディレクトリを比較すると、特別なコマンドが出力に追加されます。 したがって、結果として得られるものは、2つのディレクトリに共通した テキストファイルを dir1 における状態から dir2 における状態に変換する sh(1) スクリプトです。
−f −e のスクリプトと同じようなスクリプトを作りますが、 ed では使用することはできず、順序が逆になっています。
−n −e のスクリプトと同じようなスクリプトを作りますが、順序が逆であり、 各挿入または削除コマンドについて、変更された行のカウントが出力されます。 これは、 rcsdiff(1) によって使用される形式です。
−c デフォルトは 3行の分脈の表示ですが、例えば −c10 とすることによって 10行に変更することができます。 −c を使用した場合には、出力フォーマットは少し違ってきます。 この出力は、対象となったファイルの識別名と作成日付で始まり、 そのあとに各変更が12個の ∗ がある行によって分離されて表示されます。 file1 から削除された行は‘−’でマークされ、 file2 へ追加された行は‘+’でマークされます。 片方のファイルからもう一方のファイルへ変更された行は、 両方のファイルで‘!’を用いてマークされます。
互いの <context> 行内にある変更は、出力時にグループ化されます。 (これは、以前の“diff −c”と変わりましたが、結果として得られる出力は、 普通、もっと理解しやすくなっています)。
−h 高速ですが綿密ではない仕事をします。変更の長さが短く、 明確に分離されているときにだけ使用されますが、 どんなに長いファイルでも扱うことができます。
−Dstring diff に file1 と file2 のマージされたバージョンを標準出力に作成させます。この場合、 string を定義しない結果のコンパイルが file1 のコンパイルになるように Cプリプロセッサの制御が含められます。 string を定義した場合は file2 になります。
−b 後続ブランク(スペースとタブ)を無視されるようにします。 その他の空の文字列は同様に比較します。
−w −b に似ていますが、後続ブランクだけではなく、 ブランクとタブをすべて無視させます。 例えば、“if ( a == b )”は“if(a==b)”として比較されます。
−i 大文字と小文字の区別を無視します。例えば、“A”は“a”と同様に扱われます。
−t 出力行でタブを展開します。 通常の出力または −c の出力は、各行の前にキャラクタを追加して、 オリジナルのソース行のインデントをなくし、 出力リストを読みにくくします。 このオプションは、 オリジナルのソースのインデントを保存します。
関連ファイル
/tmp/d?????
/usr/lib/diffh −h 用
/bin/diffディレクトリの比較用
/bin/pr
関連事項
cmp(1), cc(1), comm(1), ed(1), diff3(1)
診断
終了ステータスは相違がない場合には 0、相違がある場合には 1、 トラブルが発生した場合には 2 です。
バグ
−e または −f オプションで作られた編集スクリプトは、 単一の‘.’から成る行の作成については配慮されていません。
−b または、 −w、 −i オプションを指定してディレクトリの比較を行う場合には、 diff は、まず cmp を用いてファイルを比較し、次に、それらが同じでない場合には、 diff のアルゴリズムの実行を決定します。 これは、相違が重要ではない空文字列または大文字と小文字の 違いだけであるためにファイルが同じであるとされると、 少量の見せかけだけの出力を生じさせます。
NEWS-OSRelease 3.3