JP1/Advanced Shell
形式
diff[-a][-b][-i][-s][-w][-c行数|-C 行数|-q|-u行数|-U 行数][-L ラベル] パス名1 パス名2 diff[-a][-b][-i][-r][-s][-w][-c行数|-C 行数|-q|-u行数|-U 行数][-L ラベル] ディレクトリ名1 ディレクトリ名2
機能
2つのファイルや標準入力を比較します。
引数
- -a
- ファイルをテキストと見なして比較します。
- -b
- 行中の1つ以上のスペースまたはタブを1個のスペースまたはタブとして比較します。-wオプションが指定されている場合は,-wオプションが有効となります。
- -i
- 英大文字と英小文字を区別しません。
- -s
- ファイルの内容が同じ場合,メッセージ(Files パス名1 and パス名2 are identical)を出力します。
- -w
- 行中のスペースおよびタブをすべて無視して比較します。-wオプションを指定すると,-bオプションの指定は無効になります。
- -c行数
- 比較するパス名を標準出力に出力します。行の追加,削除および変更を+,-,!の記号で出力します。-cに続けてスペースを空けないで行数を指定した場合,差異の前後に指定した行数ずつ出力します。行数を指定しない場合,3行ずつ出力します。
- -C 行数
- 差異の前後に行数で指定した行数ずつ出力します。
- -q
- 差異がある場合,メッセージ(Files パス名1 and パス名2 differ)だけを出力します。
- -u行数
- 比較するパス名を標準出力に出力します。行の追加および削除を+,-の記号で出力します。差異が1つのセクションとして出力されます。-uに続けてスペースを空けないで行数を指定した場合,差異の前後に指定した行数ずつ出力します。行数を指定しない場合,3行ずつ出力します。
- -U 行数
- 比較するパス名を標準出力に出力します。行の追加および削除を+,-の記号で出力します。差異が1つのセクションとして出力されます。差異の前後に行数で指定した行数ずつ出力します。
- -L ラベル
- -c,-u,-C,-Uオプションが指定されている場合,パス名の代わりにラベルで指定したラベルを出力します。1つ指定した場合は,パス名1の代わりにラベルを出力します。2つ指定した場合は,パス名1とパス名2の代わりに指定された順序でラベルを出力します。3つ以上指定した場合,3つ目以降は無視します。
- パス名1
- 比較元のパス名を指定します。
- 「-」を指定すると,比較する内容を標準入力から入力できます。また,標準入力から入力した内容を保存する一時ファイルが作成されます。一時ファイルの出力先ディレクトリは次のとおりです。
- UNIXの場合
環境変数TMPDIRに定義されたディレクトリに出力します。
環境変数TMPDIRが定義されていない場合は,/tmpに出力します。
- Windowsの場合
共通APデータフォルダ\HITACHI\JP1AS\miscに出力します。
- パス名2
- 比較先のパス名を指定します。
- 「-」を指定すると,比較する内容を標準入力から入力できます。また,標準入力から入力した内容を保存する一時ファイルが作成されます。一時ファイルの出力先ディレクトリは次のとおりです。
- UNIXの場合
環境変数TMPDIRに定義されたディレクトリに出力します。
環境変数TMPDIRが定義されていない場合は,/tmpに出力します。
- Windowsの場合
共通APデータフォルダ\HITACHI\JP1AS\miscに出力します。
- -r
- ディレクトリ単位で比較した場合,サブディレクトリがあるときは,その配下も再帰的に検索して比較します。
- ディレクトリ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オプション指定時以外の表示形式です。2つのファイルの差異を表示します。
2つのファイルの差異の開始位置,終了位置および差異を表示します。2つのファイルの差異の開始位置と終了位置の間の記号の意味を次に示します。
複数行にわたり差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。差異の行頭の<は削除および変更された行を表し,>は追加および変更された行を表します。<と>の後ろにはスペースが1つ出力されます。
- a:追加
- d:削除
- c:変更
コンテキスト形式 -c,-Cオプションを指定した場合の表示形式です。出力では差異がある行に加えて前後の変更されていない行も表示します。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。
ヘッダには2つのファイルの情報を次のように表示します。
差異は,次のように表します。
- 差異の固まりの境:15個のアスタリスク(*)
- 2つのファイルの差異の開始位置,終了位置および差異
+,マイナス(-),!の後ろにはスペースが1つ出力されます。また,差分がない行の先頭にはスペースが2つ出力されます。
- 行頭に+がある行:追加があった行
- 行頭にマイナス(-)がある行:削除があった行
- !がある行:変更があった行
差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度15個のアスタリスク(*)を表示し,差異を表示します。ユニファイド形式 -u,-Uオプションを指定した場合の表示形式です。出力はコンテキスト形式の出力を1つのセクションとして表示しています。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。
ヘッダには2つのファイルの情報を次のように表示します。
差異は,次のように表示します。
- 2つのアットマーク(@)で始まる行:2つのファイルの差異の開始位置,終了位置および差異
+とマイナス(-)の後ろには,コンテキスト形式の場合と異なり,スペースは出力されません。また,差分がない行の先頭にはスペースが1つ出力されます。
- 行頭に+がある行:追加があった行
- 行頭にマイナス(-)がある行:削除があった行
変更があった行は,削除された行,追加された行として表されます。
差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度2つのアットマーク(@)で始まる2つのファイルの差異の開始位置と終了位置を表示し,差異を表示します。
通常表示形式の例
通常表示形式の出力例を次に示します。
- 出力例
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で削除された行を示します。変更部分は,削除された行,追加された行として表されます。
戻り値
戻り値 意味 0 ファイルは同一です。 1 ファイルは異なっています。 2以上 エラー終了
注意事項
- -cオプション,-Cオプション,-qオプション,-uオプションおよび-Uオプションは最後に指定したオプションが有効となります。
- ファイルの先頭から8,192バイト以内で表示できる1バイト文字,スペース,タブ,バックスペースおよびマルチバイト文字以外のデータが含まれている場合は,バイナリファイルと見なされます。
- ロケールと異なる文字コードのファイルはバイナリファイルと見なされます。
- Windowsの場合,ファイルおよび標準入力,標準出力をバイナリモードで入出力します。改行コードは変換しません。
- パス名に「-」を指定した場合,端末からの標準入力の入力中や比較処理の実行中にdiffコマンドの実行を中断すると,一時ファイル「diff.xxxxxxxx(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- -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] [-L label] file1 file2 diff [-abirsw] [-c[number] | -C number | -q | -u[number] | -U number] [-L label] dir1 dir2
- ファイルがない場合のエラーメッセージを表示します。
C:\TEMP>%ADSH_OSCMD_DIR%\diff file99 file123 diff: file99: No such file or directory
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.