cmp コマンド

目的

2 つのファイルの内容を比較し、異なっている最初の文字を 報告します。

構文

cmp-l -s File1 File2

説明

cmp コマンドは File1 パラメーターと File2 パラメーターにより指定されたファイルを比較して、その結果を標準出力に書き出します。File1 パラメーターまたは File2 パラメーターに - (負符号) を指定すると、cmp コマンドはそのファイルの標準入力を読み取ります。標準入力から読み取ることができる ファイルは 1 つだけです。デフォルトの状態で、パラメーターに指定されたファイルが同じである場合、cmp コマンドは何も表示しません。指定したファイルに違いがある場合は、cmp コマンドは最初に違いが発生した位置で、バイトと行番号を表示します。-l フラグを指定した場合、および一方のファイルがもう一方のファイルの初期サブシーケンスである場合 (つまり、違いを発見しないまま cmp コマンドが片方のファイルのファイル終了文字を読み取った場合) は、cmp コマンドはこのことを記録します。通常は、cmp コマンドを使ってテキスト以外のファイルを比較 し、diff コマンドを使ってテキスト・ファイルを比較します。

フラグ

項目 説明
-l (小文字の L) 違いがあるたびに、バイト番号を 10 進で、違いのある部分のバイトを 8 進で表示します。
-s 終了値のみを返します。0 は同一ファイル、1 は異なるファイル、2 はアクセス不能または検索不可のオプションを示します。

終了状況

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

項目 説明
0 2 つのファイルは同じです。
1 2 つのファイルは異なっています。この値は、一方のファイルが他方のファイルの初期サブシーケンスである (一方のファイルが他方の最初の部分と同じ) 場合でも示されます。
>1 エラーが発生しました。

  1. 2 つのファイルが同一かどうかを判別するには、 次のように入力します。
    cmp prog.o.bak prog.o
    これにより、 prog.o.bak prog.o が比較されます。 これらのファイルが同一であれば、メッセージは何も表示されません。 ファイルが異なる場合は、違いのあった最初の場所が表示されます。例を以下に示します。
    prog.o.bak prog.o differ: char 4, line 1
    メッセージ「cmp: EOF on prog.o.bak」が表示された場合は、prog.o の最初の部分は prog.o.bak と同じですが、prog.o. にはさらにデータがあることになります。
  2. 違いのある部分のバイトの各組を表示するには、 以下のように入力します。
    cmp  -l prog.o.bak prog.o
    これによって 2 つのファイルが比較され、違いがある部分のバイト番号 (10 進) と相違するバイトの内容 (8 進) が表示されます。例えば、5 番目のバイトが prog.o.bak では 8 進の 101 なのに対して、prog.o では 8 進の 141 であった場合、cmp コマンドは以下のように表示します。
    5 101 141
  3. メッセージを書き出さずに 2 つのファイルを比較するには、 次のように入力します。
    cmp  -s prog.c.bak prog.c
    このコマンドにより、ファイルが同じであれば終了値に 0 が戻り、 異なる場合は 1 が、またエラーが起これば 2 が戻ります。 このフォーマットのコマンドは通常、シェル・プロシージャー内で使われます。 例えば次のとおりです。
    if cmp  -s prog.c.bak prog.c
    then
    echo No change
    fi
    このシェル・プロシージャーの部分では、ファイルが同じであれば「No change」が表示されます。

ファイル

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