このページの内容

1 比較とは何か

2つのファイルの差分には、いくつかの捉え方があります。1つは、一方のファイルから他方を作るために、削除・挿入・変更された行の連なりとして捉える方法です。diffは2つのファイルを行ごとに比較し、異なる行のまとまりを見つけ、それぞれのまとまりを報告します。異なる行は、用途の異なる複数の書式で報告できます。

GNU diffは、差分の詳細を示さずにファイルが異なるかどうかを表示できます。また、自分にとって重要ではない特定の種類の差分を抑制する方法もあります。最もよくあるのは、語や行の間にある空白の量の変化です。diffには、字母の大文字・小文字の差や、指定した正規表現に一致する行の差分を抑制する方法もあります。これらのオプションは併用でき、たとえば空白と大文字・小文字の変化を両方無視できます。

別の捉え方は、2つのファイルを、同じ場合も異なる場合もあるバイトの対の連なりとして見る方法です。cmpは、行ごとではなくバイトごとに2つのファイルの差分を報告します。そのため、バイナリファイルの比較ではdiffより役立つことがよくあります。テキストファイルでは、cmpは主に、2つのファイルが同一かどうかだけを知りたい場合や、一方が他方の先頭部分と一致するかどうかを知りたい場合に役立ちます。

行ごとではなくバイトごとに変更を捉えるとどうなるかを示すため、ファイルの先頭に改行文字を1つ追加した場合を考えてみてください。このファイルを、先頭の改行がない点以外は同一のファイルと比較すると、diffは空行が追加されたと報告します。一方、cmpは2つのファイルのほぼすべてのバイトが異なると報告します。

diff3は通常、3つの入力ファイルを行ごとに比較し、異なる行のまとまりを見つけ、それぞれのまとまりを報告します。その出力は、同じファイルに対する2組の異なる変更を確認しやすいように設計されています。

これらのコマンドは、必ずしも入力ファイルを読み込まずに比較を行います。たとえば、2つのファイルが異なるかどうかだけを報告するようdiffに求めた場合、ファイルサイズが違うと分かれば、処理のために内容を読む必要はありません。