diff - 2 つのファイルを比較し、違いを表示する

形式

diff [–BbefHhimNnrsw] [–C n] [–c[n]] [–Difname] [-M mark] [-W option[,option]...] path1 path2

説明

diff コマンドは、引数 path1 に指定された ファイルを、引数 path2 に指定されたファイルに変換するために必要な 変更の最小のセットを判別します。

入力ファイルはテキスト・ファイルでなければなりません。どちらか (ただし、どちらかだけ) のファイル名が である場合は 、diff はそのファイルの標準入力 (stdin) の コピーを使用します。path1 または path2 のうちの一方だけが ディレクトリーである場合、diff はそのディレクトリー内の、もう一方のファイル名と同じ名前のファイルを使用します。両方ともディレクトリーである場合 、diff は 2 つのディレクトリー内の同じファイル名を持ったファイルを比較します。しかし、–r オプションを指定しない限り、サブディレクトリー内のファイルは比較しません。 2 つのディレクトリーを比較する場合、diff はキャラクター型スペシャル・ファイル または FIFO スペシャル・ファイルとその他のファイルとを比較しません。

デフォルトでは、出力は、ed テキスト・エディターに似た スタイルの、変更の記述で構成されています。まず、変更のタイプを示す 1 行が表示されます。変更の タイプは、a (追加)、d (削除)、および c (変更) の 3 つです。出力は対称的なものになります。すなわち 、path1 の削除はその相手である path2 の追加です。diff は、各操作に path1 の行番号 (または範囲) の接頭部を付け、また path2 の行番号 (または範囲) の接尾部を付けます。変更のタイプを示す 行の後に、diff は削除または追加された行を表示します。path1 から の行には < の接頭部が付けられ、path2 からの行に は > が付けられます。

オプション

以下のオプションによって、ファイルの比較の出力またはスタイルが制御されます。
–B
タグ付きファイルの自動変換を使用不可にします。filecodeset または pgmcodeset オプション (-W オプション) が指定されている場合、このオプションは無視されます。
–b
末尾ブランクおよびタブを無視します。入力行内のその他の場所の隣接したブランクとタブのグループは、同等であるとみなします。

例えば、あるファイルがある場所に 3 つのスペースと 1 つのタブのストリングを 持っており、他のファイルが 2 つのスペースのストリングを同じ場所に 持っていたとすれば、diff はこれを相違として報告しません。

–C n
各変更の前後の n 行の内容を表示します。diff は、path1 から除去された行を でマーク し、path2 に追加された行を + でマークし、両方のファイルで変更された行を ! でマークします。
–c[n]
これは –Cn と同じですが n はオプショ ナルです。n のデフォルト値は 3 です。diff は、path1 から除去された行を で マークし、path2 に追加された行を + でマークし、両方のファイルで変更された行を ! でマークします。
–Difname
ifname が定義されている場合は path2 の内容 を、ifname が定義されていない場合は path1 の内容を 作成するために、C プリプロセッサーの入力に適した出力を表示します。
–e
path1path2 に変換 する ed テキスト・エディター用のコマンドのスクリプトを書き込みます。diff は出力を標準出力 (stdout) に送ります。
–f
–e オプションによって作成されるものとは逆の順序で、path1 から path2 に変換するのに必要な変更を 示して、スクリプトを stdout に書き込みます。 ただし、スクリプトは ed エディターでの使用に適した形式にはなりません。作成されるコマンドは、–e で作成されるものとは逆になり、行番号の範囲はコンマではなくスペースで区切られます。このオプションは –m オプションと 対立します。
–H
正規アルゴリズムがシステム・リソースを使い切った場合にのみ、簡略 (–h) アルゴリズムを使用します。
–h
正規の diff アルゴリズムの代わりに、高速の簡略アルゴリズムを使用します。このアルゴリズムは、大きいファイルを 扱うことができます。ただし、違いの多いファイル内の違いの最小のセットを検出するには 適していません。
–i
比較を行うときに、大文字と小文字の違いを無視します。
–m
どの行が追加されたか (右マージンに縦線があるもの)、どの行が削除された か (右マージンの * で示される) を表示するための特別な フォーマッター要求行を散在させて、path2 の内容を作成します。
–M
IBM® 内部オプションでサポートされません。
–n
IBM 内部オプションでサポートされません。
–N
IBM 内部オプションでサポートされません。
–r
ディレクトリー内の対応するファイルを比較し、さらに、反復的に そのディレクトリーの下の対応する サブディレクトリーの対応するファイルを比較します。このオプションは、コマンド行に 2 つのディレクトリー名を指定した場合に使用できます。
–s
2 つのディレクトリーをファイルごとに比較し、2 つのディレクトリー間で 等しいファイルについてのメッセージを出力します。
–w
比較プロセス中に空白文字を無視します。
-W option[,option]...
z/OS 固有のオプションを指定します。オプションのキーワードは、大/小文字が区別されます。指定可能なオプションは、以下のとおりです。
filecodeset=codeset
ファイルの読み取り時に、あるコード・セットから別のコード・セットへのテキスト変換を実行します。ファイルのコード化文字セットは codeset です。codeset は、システムに認識されているコード・セット名かコード化数字セット ID (CCSID) のいずれかです。コマンド iconv -l は、既存の CCSID とそれらに対応するコード・セット名をリストすることに留意してください。どんなファイル・タグを含むファイルであっても、filecodeset および pgmcodeset オプションを使用できます。

pgmcodeset を指定したが filecodeset を省略した場合、ファイルが別のコード・セットでタグ付けされていても、ファイルのデフォルトのコード・セットは ISO8859-1 です。filecodesetpgmcodeset のいずれも指定しない場合、自動変換が有効であるか、_TEXT_CONV 環境変数にテキスト変換が指定されていない限り、テキスト変換は実行されません。 テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。

filecodeset または pgmcodeset を指定した場合、このコマンドの呼び出しに対する自動変換は無効となり、-B オプションを指定しても無視されます。自動変換について詳しくは、「z/OS UNIX System Services 計画」を参照してください。

filecodeset の値を指定するときは、Unicode Service でサポートされる値を使用します。サポートされるコード・セットについて詳しくは、「z/OS Unicode Services ユーザーズ・ガイドおよび解説書」を参照してください。

pgmcodeset=codeset
ファイルの読み取り時に、あるコード・セットから別のコード・セットへのテキスト変換を実行します。プログラム (コマンド) のコード化文字セットは codeset です。codeset は、システムに認識されているコード・セット名かコード化数字セット ID (CCSID) のいずれかです。コマンド iconv -l は、既存の CCSID とそれらに対応するコード・セット名をリストすることに留意してください。どんなファイル・タグを含むファイルであっても、filecodeset および pgmcodeset オプションを使用できます。

filecodeset が指定されているが pgmcodeset が省略されている場合、デフォルトのプログラム・コード・セットは IBM-1047 です。filecodesetpgmcodeset のいずれも指定しない場合、自動変換が有効であるか、_TEXT_CONV 環境変数にテキスト変換が指定されていない限り、テキスト変換は実行されません。 テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。

filecodeset または pgmcodeset を指定した場合、このコマンドの呼び出しに対する自動変換は無効となり、-B オプションを指定しても無視されます。自動変換について詳しくは、「z/OS UNIX System Services 計画」を参照してください。

制約事項: pgmcodeset のサポートされる値は、IBM-1047 と 1047 のみです。

  1. 次のことを前提として、UTF-8 文字が含まれている 2 つのテキスト・ファイルを比較して違いを表示するには、以下のコマンドを発行します。
    • テキスト・ファイルはタグ付けされておらず、そのテキスト・ファイルをタグ付けしたり、自動変換を有効にしたりする予定がない。
    • タグを変更できない (例えば、タグ付けされていない public テキスト・ファイルまたは読み取り専用テキスト・ファイルを比較しているなど)。
    diff -W filecodeset=UTF-8,pgmcodeset=IBM-1047 myUtf8File01 myUtf8File02
  2. EBCDIC 文字が含まれている 2 つのテキスト・ファイルを比較して違いを表示するには、 以下のコマンドを発行します。ただし、自動変換が有効にされているが、両方のテキスト・ファイルが ASCII として誤ってタグ付けされていることを前提とします。
    diff -B myMisTaggedFile01 myMisTaggedFile02
  3. 以下の例は、diff コマンドの出力に 対する –c オプションの効果を示しています。2 つのファイル (price1 および price2) が 、–c オプションを使用した場合と使用しない場合に、比較されます。
    price1 の内容は、以下のとおりです。
    Company X Price List:
    $  0.39  -- Package of Groat Clusters
    $  5.00  -- Candy Apple Sampler Pack
    $ 12.00  -- Box of Crunchy Frog Chocolates
    $ 15.99  -- Instant Rain (Just Add Water)
    $ 20.00  -- Asparagus Firmness Meter
    $ 25.00  -- Package of Seeds for 35 Herbs
    $ 30.00  -- Child's Riding Hood (Red)
    $ 35.00  -- Genuine Placebos
    $ 45.00  -- Case of Simulated Soy Bean Oil
    $ 75.88  -- No-Name Contact Lenses
    $ 99.99  -- Kiddie Destructo-Bot
    $125.00  -- Emperor's New Clothes
    price2 の内容は、以下のとおりです。
    Company X Price List:
    $  0.39  -- Package of Groat Clusters
    $  5.49  -- Candy Apple Sampler Pack
    $ 12.00  -- Box of Crunchy Frog Chocolates
    $ 15.99  -- Instant Rain (Just Add Water)
    $ 17.00  -- Simulated Naugahyde cleaner
    $ 20.00  -- Asparagus Firmness Meter
    $ 25.00  -- Package of Seeds for 35 Herbs
    $ 30.00  -- Child's Riding Hood (Red)
    $ 35.00  -- Genuine Placebos
    $ 45.00  -- Case of Simulated Soy Bean Oil
    $ 75.88  -- No-Name Contact Lenses
    $ 99.99  -- Kiddie Destructo-Bot
    次のコマンド
    diff price1 price2
    を発行すると、以下が表示されます。
    3c3
    < $  5.00  -- Candy Apple Sampler Pack
    --->
     $  5.49  -- Candy Apple Sampler Pack
    5a6
    > $ 17.00  -- Simulated Naugahyde cleaner
    13d13
    < $125.00  -- Emperor's New Clothes
    次のように –c オプションを追加して、
    diff -c price1 price2
    を発行すると、以下が表示されます。
    *** price1 Wed Oct 1 13:59:18 1997
    --- price2 Wed Oct 1 14:03:36 1997
    ***************
    *** 1,8 ****
    Company X Price List:
    
      $  0.39  -- Package of Groat Clusters
    ! $  5.00  -- Candy Apple Sampler Pack
      $ 12.00  -- Box of Crunchy Frog Chocolates
      $ 15.99  -- Instant Rain (Just Add Water)
      $ 20.00  -- Asparagus Firmness Meter
      $ 25.00  -- Package of Seeds for 35 Herbs
      $ 30.00  -- Child's Riding Hood (Red)
    --- 1,9 ----
      Company X Price List:
    
      $  0.39  -- Package of Groat Clusters
    ! $  5.49  -- Candy Apple Sampler Pack
      $ 12.00  -- Box of Crunchy Frog Chocolates
      $ 15.99  -- Instant Rain (Just Add Water)
    + $ 17.00  -- Simulated Naugahyde cleaner
      $ 20.00  -- Asparagus Firmness Meter
      $ 25.00  -- Package of Seeds for 35 Herbs
      $ 30.00  -- Child's Riding Hood (Red)
    ***************
    *** 10,13 ****
      $ 45.00  -- Case of Simulated Soy Bean Oil
      $ 75.88  -- No-Name Contact Lenses
      $ 99.99  -- Kiddie Destructo-Bot
    - $125.00  -- Emperor's New Clothes
    --- 11,13 ----
    diff –c は、price1 から除去された行 を でマークし、price1 に追加された行を + でマークし、両方のファイルで変更された行を ! でマークします。この例では、diff は コンテキストが分かるように、デフォルトによって各行の前後の 3 行を表示して います。1 行が両方のファイルで 変更されています (! でマークされている)。1 行が price1 に追加 され (+ でマークされている)、そして 1 行が price1 から削除されて ( で マークされている) います。
    注: 比較しているファイルの対応する行に表示するマークがない場合は、その行は表示されません。price2 の行 11 から 13 は、この理由によって表示されません。

ローカライズ

diff は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_TIME
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

環境変数

diff は、以下の環境変数を使用します。
_TEXT_CONV
コマンドのテキスト変換情報が含まれます。-B オプション、あるいは filecodeset または pgmcodeset オプション (-W option) のいずれかが指定されている場合、テキスト変換情報は使用されません。テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。

終了値

0
比較したファイルに違いはありません。
1
diff はファイルを比較し、違いを検出しました。
2
以下のいずれかによる失敗。
  • コード・セットが無効である
  • 自動変換をオフにできなかった
  • 要求されたテキスト変換を実行できなかった
  • コマンド行の引数が正しくない
  • 入力ファイルのうちの 1 つが見つからない
  • メモリー不足
  • 入力ファイルのうちの 1 つで読み取りエラー
4
ファイルのうちの少なくとも 1 つがバイナリー・ファイルであり、LINE_MAX バイト 以上離れた組み込み NUL (¥0) バイトまたは改行が含まれています。

メッセージ

以下の エラー・メッセージが出される可能性があります。
file filename: no such file or directory
指定された filename は存在しません。filename は明示的に入力された ものであるか、または、diff が一方のファイル引数のディレクトリーと もう一方のベース名から生成したものです。
Files file1 and file2 are identical
–s オプションが指定されました。示された 2 つのファイルは同じです。
Common subdirectories: name and name
このメッセージは、diff がディレクトリーの内容を比較し、–r が指定されていなかった 場合に表示されます。2 つのサブディレクトリーの名前が同じであることを diff が発見した 場合は、ディレクトリーは存在することは報告されますが、2 つのディレクトリーの 内容は比較されません。
Insufficient memory (try diff –h)
ファイルの違いを見つけるアルゴリズム内で使用する、データ構造を 生成するためのメモリーを diff が全部使い切って しまいました。(制限を参照。)diff–h オプションは、メモリーを使い切らずに任意のサイズのファイルを処理することができます。
Internal error—cannot create temporary file
diff は、必要な作業ファイルを作成することが できませんでした。ディレクトリー /tmp が存在するか、または diff が一時ファイルを保管できるディレクトリーを指定する TMPDIR 環境変数が環境に含まれていることを確認してください。さらに、このディレクトリー内に十分なファイル・スペースがあることも 確認してください。
Missing ifdef symbol after -D
コマンド行の –D オプションの後に、条件ラベルが指定されていません。
Only one file may be –
diff のコマンド行に通常指定される 2 つの入力ファイルのうち、 標準入力 (stdin) にすることができるのは 1 つだけです。
Too many lines in filename
最大行数 (制限を参照) 以上のファイルが、diff に与えられました。

制限

最長の入力行は 1024 バイトです。–h の場合を除いて、ファイルは INT_MAX 行に制限されます。INT_MAX は limits.h 内で 定義されます。

移植性

POSIX.2X/Open 移植性ガイドUNIX システム。

The –B–D–H–h–i–m–s–W、および –w オプション、および –c オプションの n 引数は POSIX 標準の拡張です。

関連情報

cmpcommpatch

J. W. Hunt and M. D. McIlroy 著、An Algorithm for Differential File Comparison (Report 41, from Computing Science, Bell Laboratories, Murray Hill, NJ 07974, (June 1976) の 9 ページ)。