DIFF(1)

名称
diff - 2 つのテキストファイルの間の差を求める

書式
diff [options] from-file to-file

解説
diff の最も単純な使用方法は、 from-file と to-file の 2 つのファイルを指定することです。この場合、 diff は、その 2 つのファイルの内容を比較します。ファイル名として - を指定した場合は、標準入力から読み込みを行います。特殊な場合として、 diff - - は標準入力をそれ自身と比較します。

もし、 from-file がディレクトリで、 to-file がディレクトリでなかった場合、 diff は to-file で指定したファイル名と同じ名前のファイルを from-file のディレクトリから捜して、そのファイルとの間で比較を行います。 また、この逆の比較も可能です。ここで、 ディレクトリでない方のファイルに `-' を指定することはできません。

from-file と to-file の両方がディレクトリだった場合、 diff は、両方のディレクトリでアルファベット順にファイル名が同じファイル同士を 比較していきます。この比較は、 -r もしくは --recursive オプションを指定しない限り、再帰的には行われません。 diff は、ディレクトリそのものの中身をファイルと同等なものとみなして比較 することは決してありません。標準入力には名前が無く、 ``同じ名前を持ったファイル''の概念が適用できないので、 完全指定したファイルは標準入力であってはなりません。

diff のオプションは - で始まります。よって通常は from-file と to-file は - で始まってはいけません。しかしながら、それ自体が引数である -- 以降の全ての引数は、 ファイル名が `-' で始まっていてもファイル名として扱われます。

  オプション
GNU diff の全オプションの要約を以下に示します。 ほとんどのオプションには名前が 2 つあり、全く同じ意味を持ちます。 1 つは先頭に - がつく 1 文字の名前で、もう 1 つのものの先頭には -- がつき、長い名前を持っています。複数の 1 文字のオプションは、 (引数を持たない限り) 1 つの文字列にまとめてしまって構いません。たとえば -ac は -a -c と等価です。長い名前のオプションはその名前の接頭辞が一意的に決まればどんな 省略でもできます。鍵括弧 ([ と ]) は、オプションが省略可能な引数を持つことを示します。

-lines
    前後の lines 行 (整数) を表示します。 このオプション自体は出力フォーマットを指示せず、また、 -c もしくは -u と組み合わせない限り何の効果もありません。このオプションは 時代遅れのものとなっています。 patch をうまく働かせるためには、少なくとも前後 2 行ずつは必要です。

-a  テキストファイルでないようなものについても、全てのファイルを テキストとみなして、1 行ずつ比較していきます。

-b  空白の数の違いを無視します。

-B  空行が入っているもしくは足りないなどの違いを無視します。

--brief
    ファイルが違っているかどうかだけを報告します。 違いの詳細は報告しません。

-c  context diff 形式を使用します。

-C lines

--context[=lines]
    context diff 形式を使用します。不一致の行の前後に、 lines で指定した行数の一致した行も表示します。 lines が指定されない場合は 3 行です。 patch をうまく働かせるためには、少なくとも前後に 2 行は必要です。

--changed-group-format=format
    if-then-else 形式において、両方のファイルで異なっている行を含む部分の出力に format を使います。

-d  アルゴリズムを、より小さな違いを見つけることもあるものに変更します。 このオプションを指定すると diff は遅くなります (かなり遅くなることもあります)。

-D name
    if-then-else でマージした出力を作成ます。プリプロセッサマクロの条件は name にします。

-e

--ed
    正しい ed スクリプトとして出力を作成します。

--exclude=pattern
    ディレクトリ単位の比較の時、ファイルやサブディレクトリのベース名が pattern にマッチする場合はそれらを無視します。

--exclude-from=file
    ディレクトリ単位の比較の時、ファイルやサブディレクトリのベース名が file で指定したファイルに含まれているパターンにマッチする場合はそれらを無視します。

--expand-tabs
    入力ファイルのタブのアライメントを維持するために、 出力時にタブをスペースに変換します。

-f  ed のスクリプトと一見同じような出力を作成します。ただし、ファイルに 現われる順序が違います。

-F regexp
    context diff および unified diff 形式において、差分のブロック毎に、 差分のブロック前方で regexp にマッチする行のうちで最もブロックに近い行を出力します。

--forward-ed
    ed のスクリプトと一見同じような出力を作成します。ただし、ファイルに 現われる順序が違います。

-h  現在このオプションは何の効果もありません。 UNIX の diff との互換のために用意してあります。

-H  発見的 (heuristic) な方法を用いて、 小さな違いがあちこちにあるような大きなファイルの処理を高速化します。

--horizon-lines=lines
    2 つのファイルの先頭と末尾における共通部分のうち lines 行を残したままで差分を検索します

-i  英大文字と小文字の違いを無視します。大文字と小文字は同一なものと みなされます。

-I regexp
    正規表現 regexp にマッチした行が追加あるいは削除されているだけの違いは無視します。

--ifdef=name
    if-then-else でマージした出力を作成ます。プリプロセッサマクロの条件は name にします。

--ignore-all-space
    比較時に、空白は無視するようにします。

--ignore-blank-lines
    空行が入っているもしくは足りないなどの違いを無視します。

--ignore-case
    英大文字と小文字の違いを無視します。大文字と小文字は同一なものと みなされます。

--ignore-matching-lines=regexp
    正規表現 regexp にマッチした行が追加あるいは削除されているだけの違いは無視します。

--ignore-space-change
    空白の数の違いを無視します。

--initial-tab
    通常形式および context diff 形式において、テキスト先頭に空白文字ではなく タブを入れます。こうすると、行に含まれるタブが元と同じような形で見えるように なります。

-l  出力を pr に通してページ付けを行います。

-L label

--label=label
    context diff 形式および unified diff 形式において、 ヘッダに付加されるファイル名の代りに、 label で指定したラベルを使用します。

--left-column
    2 段組形式において、2 つの共通の行の左の欄だけを表示します。

--line-format=format
    format を用いて、すべての入力行を if-then-else 形式で出力します。

--minimal
    アルゴリズムを、より小さな違いを見つけることもあるものに変更します。 このオプションを指定すると diff は遅くなります (かなり遅くなることもあります)。

-n  RCS diff 形式で出力します。 -f と似ていますが、各コマンドには適用した行数がついた形となります。

-N

--new-file
    ディレクトリ単位の比較の時に、片方のディレクトリにだけ存在するファイルに 関しては、他のディレクトリでは空のファイルがあるものとして扱います。

--new-group-format=format
    if-then-else 形式において、2 番目のファイルにだけ存在する部分の出力に format を使います。

--new-line-format=format
    if-then-else 形式において、2 番目のファイルにだけ存在する行の出力に format を使います。

--old-group-format=format
    if-then-else 形式において、1 番目のファイルにだけ存在する部分の出力に format を使います。

--old-line-format=format
    if-then-else 形式において、1 番目のファイルにだけ存在する行の出力に format を使います。

-p  C のプログラムを認識して、どの関数で変更があったかを表示します。

-P  ディレクトリ単位の比較の時に、2 番目のディレクトリにしか存在しないファイルに 関しては、他方のディレクトリでは空のファイルがあるものとして扱います。

--paginate
    出力を pr に通してページ付けを行います。

-q  ファイルが違っているかどうかだけを報告します。 違いの詳細は報告しません。

-r  ディレクトリ単位の比較の時に、サブディレクトリがあれば、その配下も再帰的に 検索して比較を行います。

--rcs
    RCS diff 形式で出力します。 -f と似ていますが、各コマンドには適用した行数がついた形となります。

--recursive
    ディレクトリ単位の比較の時に、サブディレクトリがあれば、その配下も再帰的に 検索して比較を行います。

--report-identical-files

-s  ファイルの内容が同じだった時に、その旨を報告します。

-S file
    ディレクトリ単位の比較の時に、 file で指定したファイル名のファイルから実行を開始します。 これは、一連の比較作業を中断した後で途中から再開する場合に便利です。

--sdiff-merge-assist
    sdiff の作業の手助けとなる付加情報を表示します。普通、 sdiff が diff 実行の際にこのオプションを付けるので、ユーザが直接このオプションを 使うことはありません。

--show-c-function
    C のプログラムを認識して、どの関数で変更があったかを表示します。

--show-function-line=regexp
    context diff および unified diff 形式において、差分のブロック毎に、 差分のブロック前方で regexp にマッチする行のうちで最もブロックに近い行を出力します。

--side-by-side
    比較する 2 つのファイルの内容を、横に並べて表示します (side-by-side 形式)。

--speed-large-files
    発見的 (heuristic) な方法を用いて、 小さな違いがあちこちにあるような大きなファイルの処理を高速化します。

--starting-file=file
    ディレクトリ単位の比較の時に、file で指定したファイル名のファイルから 実行を開始します。これは、一連の比較作業を中断した後で途中から再開する場合に 便利です。

--suppress-common-lines
    side-by-side 形式の表示で、同じ内容の行は表示しないようにします。

-t  入力ファイルのタブのアライメントを維持するために、 出力時にタブをスペースに変換します。

-T  通常形式および context diff 形式において、テキスト先頭に空白文字ではなく タブを入れます。こうすると、行に含まれるタブが元と同じような形で見えるように なります。

--text
    テキストファイルでないようなものについても、全てのファイルを テキストとみなして、1 行ずつ比較していきます。

-u  unified diff 形式を用います。

--unchanged-group-format=format
    if-then-else 形式において、両方のファイルで共通な部分の出力に format を使います。

--unchanged-line-format=format
    if-then-else 形式において、両方のファイルで共通な行の出力に format を使います。

--unidirectional-new-file
    ディレクトリ単位の比較の時に、2 番目のディレクトリにしか存在しないファイルに 関しては、他方のディレクトリでは空のファイルがあるものとして扱います。

-U lines

--unified[=lines]
    unified diff 形式にします。不一致の行の前後に、 lines (整数) で指定した行数の一致した行も表示します。 lines が指定されない場合は 3 行です。 patch をうまく働かせるためには、少なくとも前後に 2 行は必要です。

-v

--version
    diff のバージョンを表示します。

-w  比較時に、空白は無視するようにします。

-W columns

--width=columns
    side-by-side 形式の出力において、1 行の幅を columns で指定した文字数にします。

-x pattern
    ディレクトリ単位の比較の時、ファイルやサブディレクトリのベース名が pattern にマッチする場合はそれらを無視します。

-X file
    ディレクトリ単位の比較の時、ファイルやサブディレクトリのベース名が file で指定したファイルに含まれているパターンにマッチする場合はそれらを無視します。

-y  比較する 2 つのファイルの内容を、横に並べて表示します (side-by-side 形式)。

関連項目
cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1)

戻り値
比較結果として、違いが無かった場合は 0 を、違いが発見された場合は 1 を、 何かエラーがおきた場合は 2 を返します。