Hitachi

JP1 Version 11 JP1/Advanced Shell 


8.4.8 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つのファイルや標準入力を比較します。

引数

-a

--text

ファイルをテキストと見なして比較します。

-b

--ignore-space-change

行中の1つ以上のスペースまたはタブを1個のスペースまたはタブとして比較します。-wオプションが指定されている場合は,-wオプションが有効となります。

-i

--ignore-case

英大文字と英小文字を区別しません。

-s

--report-identical-files

ファイルの内容が同じ場合,メッセージ(Files パス名1 and パス名2 are identical)を出力します。

-w

--ignore-all-space

行中のスペースおよびタブをすべて無視して比較します。-wオプションを指定すると,-bオプションの指定は無効になります。

-c行数

-C 行数

--context[=行数]

比較するパス名を標準出力に出力します。行の追加,削除および変更を+,-,!の記号で出力します。

行数を指定した場合,差異の前後に指定した行数ずつ出力します。-cオプション,--contextオプションに行数を指定しない場合,3行ずつ出力します。

なお,-cオプションに行数を指定する場合,スペースを空けないで行数を指定してください。

-q

--brief

差異がある場合,メッセージ(Files パス名1 and パス名2 differ)だけを出力します。

-u行数

-U 行数

--unified[=行数]

比較するパス名を標準出力に出力し,行の追加および削除を+,-の記号で出力します。差異が1つのセクションとして出力されます。

行数を指定した場合,差異の前後に指定した行数ずつ出力します。-uオプション,--unifiedオプションに行数を指定しない場合,3行ずつ出力します。

なお,-uオプションに行数を指定する場合,スペースを空けないで行数を指定してください。

-L ラベル

--label=ラベル

-c,-u,-C,-Uオプションが指定されている場合,パス名の代わりにラベルで指定したラベルを出力します。-Lオプションを1つ指定した場合は,パス名1の代わりにラベルを出力します。-Lオプションを2つ指定した場合は,パス名1とパス名2の代わりに指定された順序でラベルを出力します。

-y

--side-by-side

行の追加・削除・変更・改行コードの有無だけの差分を「>」「<」「|」「\」「/」の記号で,差異のない行は記号なしで出力します。パス名1とパス名2の各行は1行にまとめて横並びに出力します。

まとめられた1行が130カラムを超える場合は,パス名1とパス名2の各行の長さを調整して出力します。

また,次のオプションと組み合わせて出力を変更することができます。

  • -Wオプション

  • --suppress-common-linesオプション

-W 出力幅

--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に出力します。

-r

--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つのファイルの差異の開始位置と終了位置の間の記号の意味を次に示します。

  • a:追加

  • d:削除

  • c:変更

複数行にわたり差異がある場合は,差異開始行と差異終了行をコンマ(,)で区切って表示します。

差異はパス名1からの差分,パス名2からの差分の順に表示し,その間に「---」を表示します。差異の行頭の<は削除および変更された行を表し,>は追加および変更された行を表します。<と>の後ろにはスペースが1つ出力されます。

コンテキスト形式

-c,-Cオプションを指定した場合の表示形式です。出力では差異がある行に加えて前後の変更されていない行も表示します。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。

ヘッダには2つのファイルの情報を次のように表示します。

  • 差異の固まりの境:15個のアスタリスク(*

  • 2つのファイルの差異の開始位置,終了位置および差異

差異は,次のように表します。

  • 行頭に+がある行:追加があった行

  • 行頭にマイナス(-)がある行:削除があった行

  • 行頭に!がある行:変更があった行

+,マイナス(-),!の後ろにはスペースが1つ出力されます。また,差分がない行の先頭にはスペースが2つ出力されます。

差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度15個のアスタリスク(*)を表示し,差異を表示します。

ユニファイド形式

-u,-Uオプションを指定した場合の表示形式です。出力はコンテキスト形式の出力を1つのセクションとして表示しています。差異のない行を何行分表示するかは指定できます。デフォルトでは3行分表示します。

ヘッダには2つのファイルの情報を次のように表示します。

  • 2つのアットマーク(@)で始まる行:2つのファイルの差異の開始位置,終了位置および差異

差異は,次のように表示します。

  • 行頭に+がある行:追加があった行

  • 行頭にマイナス(-)がある行:削除があった行

+とマイナス(-)の後ろには,コンテキスト形式の場合と異なり,スペースは出力されません。また,差分がない行の先頭にはスペースが1つ出力されます。

変更があった行は,削除された行,追加された行として表されます。

差異のある行が隣接する場合は1つの差異の固まりとして扱います。しかし,差異のある行が離れている場合は再度2つのアットマーク(@)で始まる2つのファイルの差異の開始位置と終了位置を表示し,差異を表示します。

サイドバイサイド形式

-yオプションを指定した場合の表示形式です。出力はパス名1とパス名2のそれぞれの行を1行にまとめて横並びに表示します。デフォルトでは,出力する行は差異の有無に関係なくすべての行が対象です。まとめられた1行が130カラムを超える場合は,パス名1とパス名2のそれぞれの行は横並びで130カラム以内に表示できるように長さが調節されます。

差異は,パス名2の行の前に次の記号で示します。

  • 「>」:追加された行

  • 「<」:削除された行

  • |」:変更された行

  • エスケープ文字(\):パス名1の行に改行がなかった行

  • 「/」:パス名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.
説明
  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で削除された行を示します。変更部分は,削除された行,追加された行として表されます。

サイドバイサイド形式の例

出力例
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.
説明
  1. file1とfile2のそれぞれの行を1行にまとめて横並びに出力します。

    >」はfile1からfile2で追加された行を示します。

    <」はfile1からfile2で削除された行を示します。

    |」はfile1からfile2で変更された行を示します。

    \」はfile1の行に改行がないことを示します。

    記号がない行は差異がない行です。

終了コード

終了コード

意味

0

ファイルは同一です。

1

ファイルは異なっています。

2以上

エラー終了

注意事項

使用例

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

これらのファイルを基に,コマンドの実行結果を次に示します。