diffコマンド(2つのファイルや標準入力を比較する)
- 〈このページの構成〉
形式
diff[-a][-b][-i][-s][-w] [-c行数|-C 行数|-q|-u行数|-U 行数| -y[-W 出力幅] [--suppress-common-lines]] [-L ラベル] パス名1 パス名2 diff[-a][-b][-i][-r][-s][-w] [-c行数|-C 行数|-q|-u行数|-U 行数| -y[-W 出力幅] [--suppress-common-lines]] [-L ラベル] ディレクトリ名1 ディレクトリ名2
機能
2つのファイルや標準入力を比較します。
引数
- --context[=行数]
-
比較するパス名を標準出力に出力します。行の追加,削除および変更を+,-,!の記号で出力します。
行数を指定した場合,差異の前後に指定した行数ずつ出力します。-cオプション,--contextオプションに行数を指定しない場合,3行ずつ出力します。
なお,-cオプションに行数を指定する場合,スペースを空けないで行数を指定してください。
- --unified[=行数]
-
比較するパス名を標準出力に出力し,行の追加および削除を+,-の記号で出力します。差異が1つのセクションとして出力されます。
行数を指定した場合,差異の前後に指定した行数ずつ出力します。-uオプション,--unifiedオプションに行数を指定しない場合,3行ずつ出力します。
なお,-uオプションに行数を指定する場合,スペースを空けないで行数を指定してください。
- --label=ラベル
-
-c,-u,-C,-Uオプションが指定されている場合,パス名の代わりにラベルで指定したラベルを出力します。-Lオプションを1つ指定した場合は,パス名1の代わりにラベルを出力します。-Lオプションを2つ指定した場合は,パス名1とパス名2の代わりに指定された順序でラベルを出力します。
- --side-by-side
-
行の追加・削除・変更・改行コードの有無だけの差分を「>」「<」「|」「\」「/」の記号で,差異のない行は記号なしで出力します。パス名1とパス名2の各行は1行にまとめて横並びに出力します。
まとめられた1行が130カラムを超える場合は,パス名1とパス名2の各行の長さを調整して出力します。
また,次のオプションと組み合わせて出力を変更することができます。
-
-Wオプション
-
--suppress-common-linesオプション
-
- --width=出力幅
-
1行に出力する出力幅(カラム数)を変更できます。-yオプションと共に指定した場合に有効です。
- --suppress-common-lines
-
差異のない行を出力しません。-yオプションと共に指定した場合に有効です。
- パス名1
-
比較元のパス名を指定します。
「-」を指定すると,比較する内容を標準入力から入力できます。また,標準入力から入力した内容を保存する一時ファイルが作成されます。一時ファイルの出力先ディレクトリは次のとおりです。
-
UNIXの場合
環境変数TMPDIRに定義されたディレクトリに出力します。
環境変数TMPDIRが定義されていない場合は,/var/tmpに出力します。
-
Windowsの場合
共通アプリケーションフォルダ\HITACHI\JP1AS\miscに出力します。
-
- パス名2
-
比較先のパス名を指定します。
「-」を指定すると,比較する内容を標準入力から入力できます。また,標準入力から入力した内容を保存する一時ファイルが作成されます。一時ファイルの出力先ディレクトリは次のとおりです。
-
UNIXの場合
環境変数TMPDIRに定義されたディレクトリに出力します。
環境変数TMPDIRが定義されていない場合は,/var/tmpに出力します。
-
Windowsの場合
共通アプリケーションフォルダ\HITACHI\JP1AS\miscに出力します。
-
- --recursive
-
ディレクトリ単位で比較した場合,サブディレクトリがあるときは,その配下も再帰的に検索して比較します。
- ディレクトリ1
-
比較元のディレクトリを指定します。ディレクトリ1とディレクトリ2のどちらか片方にパス名を指定した場合は,同じファイル名を別のディレクトリで検索して比較します。同じファイル名が存在しない場合はエラーメッセージ(diff: 比較したいパス名: No such file or directory)を出力します。
- ディレクトリ2
-
比較先のディレクトリを指定します。ディレクトリ1とディレクトリ2のどちらか片方にパス名を指定した場合は,同じファイル名を別のディレクトリで検索して比較します。同じファイル名が存在しない場合はエラーメッセージ(diff: 比較したいパス名: No such file or directory)を出力します。
出力形式
diffコマンドによる差異の表示形式には次に示す3つがあります。指定するオプションによって,どの出力形式になるかが決まります。
形式 |
意味 |
---|---|
通常表示形式 |
-c,-C,-q,-u,-U,-yオプション指定時以外の表示形式です。2つのファイルの差異を表示します。 2つのファイルの差異の開始位置,終了位置および差異を表示します。2つのファイルの差異の開始位置と終了位置の間の記号の意味を次に示します。
複数行にわたり差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。 差異はパス名1からの差分,パス名2からの差分の順に表示し,その間に「---」を表示します。差異の行頭の<は削除および変更された行を表し,>は追加および変更された行を表します。<と>の後ろにはスペースが1つ出力されます。 |
コンテキスト形式 |
-c,-Cオプションを指定した場合の表示形式です。出力では差異がある行に加えて前後の変更されていない行も表示します。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。 ヘッダには2つのファイルの情報を次のように表示します。
差異は,次のように表します。
+,マイナス(-),!の後ろにはスペースが1つ出力されます。また,差分がない行の先頭にはスペースが2つ出力されます。 差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度15個のアスタリスク(*)を表示し,差異を表示します。 |
ユニファイド形式 |
-u,-Uオプションを指定した場合の表示形式です。出力はコンテキスト形式の出力を1つのセクションとして表示しています。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。 ヘッダには2つのファイルの情報を次のように表示します。
差異は,次のように表示します。
+とマイナス(-)の後ろには,コンテキスト形式の場合と異なり,スペースは出力されません。また,差分がない行の先頭にはスペースが1つ出力されます。 変更があった行は,削除された行,追加された行として表されます。 差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度2つのアットマーク(@)で始まる2つのファイルの差異の開始位置と終了位置を表示し,差異を表示します。 |
サイドバイサイド形式 |
-yオプションを指定した場合の表示形式です。出力はパス名1とパス名2のそれぞれの行を1行にまとめて横並びに表示します。デフォルトでは,出力する行は差異の有無に関係なくすべての行が対象です。まとめられた1行が130カラムを超える場合は,パス名1とパス名2のそれぞれの行は横並びで130カラム以内に表示できるように長さが調節されます。 差異は,パス名2の行の前に次の記号で示します。
-yオプションは-Wオプション,--suppress-common-linesオプションと組み合わせることで,1行の出力幅の変更や,差異のない行の出力抑止ができます。 |
通常表示形式の例
通常表示形式の出力例を次に示します。
- 出力例
C:\USR\JP1\oscmd\bin>diff file1 file2 1c1,2 ←1. < aaaaaaaaaaa ←2. --- ←3. > aaAAAAAaaaa ←4. > bbBBBBBbbbb ←4.
- 説明
-
-
file1とfile2の差異がある位置を表します。file1とfile2の間の記号のaは追加,dは削除,cは変更を意味します。記号の前にはfile1の行番号が,記号の後にはfile2の行番号が表示されます。複数行に渡って差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。
-
file1の差異を表します。
-
file1とfile2の差異の境目を表します。
-
file2の差異を表します。
-
コンテキスト形式の例
- 出力例
C:\USR\JP1\oscmd\bin>diff -c file1 file2 *** file1 Thu May 12 20:17:54 2011 ←1. --- file2 Thu May 12 20:18:29 2011 ←2. *************** ←3. *** 1,5 **** ←4. aaaaaaaaaaa ←5. ! bbbbbbbb ←5. cccccccccccc ←5. - dddddddddddd ←5. eeeeeeeee ←5. --- 1,5 ---- ←6. aaaaaaaaaaa ←7. ! bbbBBBbb ←7. cccccccccccc ←7. eeeeeeeee ←7. + ffffffffffffffffff ←7.
- 説明
-
-
file1のファイル情報として,ファイル名とファイルの最終修正日時を表示します。
-
file2のファイル情報として,ファイル名とファイルの最終修正日時を表示します。
-
file1とfile2の差異の固まりの境を15個のアスタリスク(*)で表示します。file1とfile2の差異がある行が3行以上離れているときは,別の固まりとして再度この境を表示したあと,次の差異の情報を出力します。
-
file1の差異の開始位置と終了位置をコンマ(,)で区切って表示します。
-
file1の差異を表示します。プラス(+)は追加,マイナス(-)は削除,!は変更を意味します。
-
file2の差異の開始位置と終了位置をコンマ(,)で区切って表示します。
-
file2の差異を表示します。プラス(+)は追加,マイナス(-)は削除,!は変更を意味します。
-
ユニファイド形式の例
- 出力例
C:\USR\JP1\oscmd\bin>diff -u file1 file2 --- file1 Thu May 12 20:17:54 2011 ←1. +++ file2 Thu May 12 20:18:29 2011 ←2. @@ -1,5 +1,5 @@ ←3. aaaaaaaaaaa ←4. -bbbbbbbb ←4. +bbbBBBbb ←4. cccccccccccc ←4. -dddddddddddd ←4. eeeeeeeee ←4. +ffffffffffffffffff ←4.
- 説明
-
-
file1のファイル情報として,ファイル名とファイルの最終修正日時を示します。
-
file2のファイル情報として,ファイル名とファイルの最終修正日時を示します。
-
file1とfile2の差異の開始位置と終了位置をコンマ(,)で区切って示します。先頭にマイナス(-)が付いている方がfile1,先頭にプラス(+)が付いている方がfile2の差異の開始位置と終了位置を示します。
-
file1とfile2の差異を一つのセクションとして示します。プラス(+)はfile1からfile2で追加された行を示します。マイナス(-)はfile1からfile2で削除された行を示します。変更部分は,削除された行,追加された行として表されます。
-
サイドバイサイド形式の例
- 出力例
C:\USR\JP1\oscmd\bin>diff -y file1 file2 a a ←1. b | b1 ←1. c c ←1. d < ←1. e e ←1. > f ←1. g \ g ←1.
- 説明
-
-
file1とfile2のそれぞれの行を1行にまとめて横並びに出力します。
「>」はfile1からfile2で追加された行を示します。
「<」はfile1からfile2で削除された行を示します。
「|」はfile1からfile2で変更された行を示します。
「\」はfile1の行に改行がないことを示します。
記号がない行は差異がない行です。
-
終了コード
終了コード |
意味 |
---|---|
0 |
ファイルは同一です。 |
1 |
ファイルは異なっています。 |
2以上 |
エラー終了 |
注意事項
-
-cオプション,-Cオプション,-qオプション,-uオプション,-Uおよび-yオプションは最後に指定したオプションが有効となります。
-
ファイルの先頭から8,192バイト以内で表示できる1バイト文字,スペース,タブ,バックスペースおよびマルチバイト文字以外のデータが含まれている場合は,バイナリファイルと見なされます。
-
ロケールと異なる文字コードのファイルはバイナリファイルと見なされます。
-
Windowsの場合,ファイルおよび標準入力,標準出力をバイナリモードで入出力します。改行コードは変換しません。
-
パス名に「-」を指定した場合,端末から標準入力に入力している途中,および比較処理を実行している最中にdiffコマンドの実行を中断すると,次の名前の一時ファイルが残ることがあります。この場合は,手動で一時ファイルを削除してください。
- 【Windowsの場合】
-
diff.XXXXXX(XXXXXXは任意の6文字の文字列)
- 【UNIXの場合】
-
diffppppp.XXXXXXXX(pppppは5桁以上のプロセスID,XXXXXXXXは任意の8文字の文字列)
使用例
diffコマンドを実行した結果表示に使用する入力ファイルの形式を次に示します。「△」はスペース,「→」はタブを表します。
-
abc.txt
aaaaaaaaaaa bbbbbbbb △△△△△△△ cccccccccccccccc → → → △△△△△△△△△△△ dddddddddddd △△△eeeeeeeeeeee
-
abcd.txt
aaAAAAAaaaa bbBBBbbb △△△△△△△ cccccccccccccccc △△△△△△△△△△△△△△△△ △△△△△△△△△△△△△△△△△△ △△△△△△△△△△△△△△△ △△△△△△△△△△△△△△△△△△△△△△△△△△△ dddddddddddd eeeeeeeeeeee
-
wxy.txt
aaaaaaaaaaa bbbbbbbb xxxxxxxxxxxxxx cccccccccccccccc dddddddddddd eeeeeeeeeeee fffffffffffffff ggggggggg
-
wxyz.txt
aaaaaaaaaaa bbbBBBbb xxxxxxxxxxxxxx cccccccccccccccc dddddddddddd fffffffffffffff ggggggggg hhhhhhhhhhhhhhhhhh
これらのファイルを基に,コマンドの実行結果を次に示します。
-
オプションを指定しない場合のデフォルトを表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff abc.txt abcd.txt 1c1 < aaaaaaaaaaa --- > aaAAAAAaaaa 3c3 < bbbbbbbb --- > bbBBBbbb 7,10c7,10 < < → → → < < △△△△△△△△△△△ --- > △△△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△△△△△△△△△△△△△ 12c12 < △△△eeeeeeeeeeee --- > eeeeeeeeeeee
-
-bオプションを指定し,スペースまたはタブの数の違いを無視します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -b abc.txt abcd.txt 1c1 < aaaaaaaaaaa --- > aaAAAAAaaaa 3c3 < bbbbbbbb --- > bbBBBbbb 12c12 < △△△eeeeeeeeeeee --- > eeeeeeeeeeee
-
-iオプションを指定し,英大文字と英小文字を区別しないで比較します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -i abc.txt abcd.txt 7,10c7,10 < < → → → < < △△△△△△△△△△△ --- > △△△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△ > △△△△△△△△△△△△△△△△△△△△△△△△△△△ 12c12 < △△△eeeeeeeeeeee --- > eeeeeeeeeeee
-
-sオプションを指定し,ファイル内容が同一の場合も報告するようにします。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -s abc.txt abc.txt Files abc.txt and abc.txt are identical
-
-wオプションを指定し,行中のスペースおよびタブをすべて無視して比較します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -w abc.txt abcd.txt 1c1 < aaaaaaaaaaa --- > aaAAAAAaaaa 3c3 < bbbbbbbb --- > bbBBBbbb
-
-qオプションを指定し,差異の内容は表示しないで,差異があるかどうかだけを表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -q abc.txt abcd.txt Files abc.txt and abcd.txt differ
-
-cオプションを指定し,行の追加,削除および変更を+,-,!の記号で表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -c ..\dir1\wxy.txt ..\dir1\wxyz.txt *** wxy.txt Thu May 12 20:17:54 2011 --- wxyz.txt Thu May 12 20:18:29 2011 *************** *** 1,10 **** aaaaaaaaaaa ! bbbbbbbb xxxxxxxxxxxxxx cccccccccccccccc dddddddddddd - eeeeeeeeeeee fffffffffffffff ggggggggg --- 1,10 ---- aaaaaaaaaaa ! bbbBBBbb xxxxxxxxxxxxxx cccccccccccccccc dddddddddddd fffffffffffffff ggggggggg + hhhhhhhhhhhhhhhhhh
-
-uオプションを指定し,行の追加および削除を+,-の記号で表示します。差異を1つのセクションとして表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -u ..\dir1\wxy.txt ..\dir1\wxyz.txt --- wxy.txt Thu May 12 20:17:54 2011 +++ wxyz.txt Thu May 12 20:18:29 2011 @@ -1,10 +1,10 @@ aaaaaaaaaaa -bbbbbbbb +bbbBBBbb xxxxxxxxxxxxxx cccccccccccccccc dddddddddddd -eeeeeeeeeeee fffffffffffffff ggggggggg +hhhhhhhhhhhhhhhhhh
-
-Cオプションを指定し,差異の前後の1行を表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -C1 wxy.txt wxyz.txt *** wxy.txt Thu May 12 20:17:54 2011 --- wxyz.txt Thu May 12 20:18:29 2011 *************** *** 2,4 **** ! bbbbbbbb xxxxxxxxxxxxxx --- 2,4 ---- ! bbbBBBbb xxxxxxxxxxxxxx *************** *** 7,10 **** dddddddddddd - eeeeeeeeeeee fffffffffffffff ggggggggg --- 7,10 ---- dddddddddddd fffffffffffffff ggggggggg + hhhhhhhhhhhhhhhhhh
-
-Uオプションを指定し,行の追加および削除を+,-の記号で表示します。差異を1つのセクションとして,差異の前後の1行を表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -U1 wxy.txt wxyz.txt --- wxy.txt Thu May 12 20:17:54 2011 +++ wxyz.txt Thu May 12 20:18:29 2011 @@ -2,3 +2,3 @@ -bbbbbbbb +bbbBBBbb xxxxxxxxxxxxxx @@ -7,4 +7,4 @@ dddddddddddd -eeeeeeeeeeee fffffffffffffff ggggggggg +hhhhhhhhhhhhhhhhhh
-
-yオプションを指定し,行の追加,削除,変更を>,<,|の記号で表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -y wxy.txt wxyz.txt aaaaaaaaaaa aaaaaaaaaaa bbbbbbbb | bbbBBBbb xxxxxxxxxxxxxx xxxxxxxxxxxxxx cccccccccccccccc cccccccccccccccc dddddddddddd dddddddddddd eeeeeeeeeeee < fffffffffffffff fffffffffffffff ggggggggg ggggggggg > hhhhhhhhhhhhhhhhhh
-
-yオプションを指定してサイドバイサイド形式で表示する場合に,--suppress-common-linesオプションを指定して差異のない行を出力しないようにします。
C:\TEMP>%ADSH_OSCMD_DIR%diff -y --suppress-common-lines wxy.txt wxyz.txt bbbbbbbb | bbbBBBbb eeeeeeeeeeee < > hhhhhhhhhhhhhhhhhh
-
-Lオプションで指定したラベルで,比較元のファイル名を表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -L name1 -c abc.txt abcd.txt *** name1 --- abcd.txt Thu May 12 20:36:44 2011 *************** *** 1,12 **** ! aaaaaaaaaaa ! bbbbbbbb △△△△△△△ cccccccccccccccc ! ! → → → ! ! △△△△△△△△△△△ dddddddddddd ! △△△eeeeeeeeeeee --- 1,12 ---- ! aaAAAAAaaaa ! bbBBBbbb △△△△△△△ cccccccccccccccc ! △△△△△△△△△△△△△△△△ ! △△△△△△△△△△△△△△△△△△ ! △△△△△△△△△△△△△△△ ! △△△△△△△△△△△△△△△△△△△△△△△△△△△ dddddddddddd ! eeeeeeeeeeee
-
-aオプションを指定しないでバイナリファイルを比較した場合を表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff binaryfile1 binaryfile2 Binary files binaryfile1 and binaryfile2 differ
-
オプションエラーのメッセージを表示します。
このメッセージは,コマンドを実行するプラットフォームによって異なる場合があります。Windowsの例を次に示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff -z diff: illegal option -- z usage: diff [-abisw] [-c[number] | -C number | -q | -u[number] | -U number | -y [-W columns] [--suppress-common-lines]] [-L label] file1 file2 diff [-abirsw] [-c[number] | -C number | -q | -u[number] | -U number | -y [-W columns] [--suppress-common-lines]] [-L label] dir1 dir2
-
ファイルがない場合のエラーメッセージを表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff file99 file123 diff: file99: No such file or directory