JP1/Advanced Shell

[目次][用語][索引][前へ][次へ]


diffコマンド(2つのファイルや標準入力を比較する)

形式

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つのファイルの差異の開始位置と終了位置の間の記号の意味を次に示します。
  • a:追加
  • d:削除
  • c:変更
複数行にわたり差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。差異の行頭の<は削除および変更された行を表し,>は追加および変更された行を表します。<と>の後ろにはスペースが1つ出力されます。
コンテキスト形式 -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.

説明
  1. file1とfile2の差異がある位置を表します。file1とfile2の間の記号のaは追加,dは削除,cは変更を意味します。記号の前にはfile1の行番号が,記号の後にはfile2の行番号が表示されます。複数行に渡って差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。
  2. file1の差異を表します。
  3. file1とfile2の差異の境目を表します。
  4. 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.

説明
  1. file1のファイル情報として,ファイル名とファイル更新日時を表示します。
  2. file2のファイル情報として,ファイル名とファイル更新日時を表示します。
  3. file1とfile2の差異の固まりの境を15個のアスタリスク(*)で表示します。file1とfile2の差異がある行が3行以上離れているときは,別の固まりとして再度この境を表示したあと,次の差異の情報を出力します。
  4. file1の差異の開始位置と終了位置をコンマ(,)で区切って表示します。
  5. file1の差異を表示します。プラス(+)は追加,マイナス(-)は削除,!は変更を意味します。
  6. file2の差異の開始位置と終了位置をコンマ(,)で区切って表示します。
  7. 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.

説明
  1. file1のファイル情報として,ファイル名とファイル更新日時を示します。
  2. file2のファイル情報として,ファイル名とファイル更新日時を示します。
  3. file1とfile2の差異の開始位置と終了位置をコンマ(,)で区切って示します。先頭にマイナス(-)が付いている方がfile1,先頭にプラス(+)が付いている方がfile2の差異の開始位置と終了位置を示します。
  4. file1とfile2の差異を一つのセクションとして示します。プラス(+)はfile1からfile2で追加された行を示します。マイナス(-)はfile1からfile2で削除された行を示します。変更部分は,削除された行,追加された行として表されます。

戻り値

戻り値 意味
0 ファイルは同一です。
1 ファイルは異なっています。
2以上 エラー終了

注意事項

使用例

diffコマンドを実行した結果表示に使用する入力ファイルの形式を次に示します。「△」はスペース,「→」はタブを表します。

[目次][前へ][次へ]


[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.