diff

ファイルを比較できます。

diff [OPTION]... FILES

FILESに2つのディレクトリを指定すれば、ディレクトリ内のすべてのファイルを、一括して比較できます。

長い形式のオプションで必須の引数は、それに対応する短い形式のオプションでも同様に必須です。
      --normal                  通常の diff を出力する (デフォルト)
  -q, --brief                   ファイルが異なるかどうかのみ表示する
  -s, --report-identical-files  両方のファイルが同一であるかどうかのみ表示する
  -c, -C NUM, --context[=NUM]   コンテキスト diff 形式で前後 NUM (デフォルト: 3) 行を表示する
  -u, -U NUM, --unified[=NUM]   ユニファイド diff 形式で前後 NUM (デフォルト: 3) 行を表示する
  -e, --ed                      ed スクリプトを出力する
  -n, --rcs                     RCS 形式の diff を出力する
  -y, --side-by-side            出力を2列にする
  -W, --width=NUM               表示する列を最大 NUM (デフォルト: 130) 列にする
      --left-column             共通行は左側の列のみ表示する
      --suppress-common-lines   共通行の出力を抑止する

  -p, --show-c-function         変更がある C 関数を表示する
  -F, --show-function-line=RE   RE に一致する最も近い行を表示する
      --label LABEL             ファイル名の代わりに LABEL を使用する
                                  (繰り返し指定できます)

  -t, --expand-tabs             出力時にタブをスペースに展開する
  -T, --initial-tab             タブで始まる行は、前にタブを置いてそろえる
      --tabsize=NUM             タブ幅を NUM (デフォルト: 8) 列に設定する
      --suppress-blank-empty    空の出力行の前後ではスペースまたはタブを抑止する
  -l, --paginate                pass output through 'pr' to paginate it

  -r, --recursive                 サブディレクトリーを再帰的に比較する
      --no-dereference            don't follow symbolic links
  -N, --new-file                  存在しないファイルを空ファイルとして扱う
      --unidirectional-new-file   存在しない最初のファイルを空ファイルとして扱う
      --ignore-file-name-case     ファイル名の大文字と小文字を区別しない
      --no-ignore-file-name-case  ファイル名の大文字と小文字を区別する
  -x, --exclude=PAT               PAT に一致するファイルを除外する
  -X, --exclude-from=FILE         FILE 内のパターンに一致するファイルを除外する
  -S, --starting-file=FILE        ディレクトリーを比較する時に FILE から始める
      --from-file=FILE1           すべての被演算子と FILE1 を比較する
                                    FILE1 はディレクトリーでもよい
      --to-file=FILE2             すべての被演算子を FILE2 を比較する
                                    FILE2 はディレクトリーでもよい

  -i, --ignore-case               ファイル内容の比較時に大文字と小文字を区別しない
  -E, --ignore-tab-expansion      タブ展開によって発生する違いを無視する
  -Z, --ignore-trailing-space     行末にあるスペースを無視する
  -b, --ignore-space-change       スペース数により生じる違いを無視する
  -w, --ignore-all-space          すべてのスペースを無視する
  -B, --ignore-blank-lines        ignore changes where lines are all blank
  -I, --ignore-matching-lines=RE  ignore changes where all lines match RE

  -a, --text                      すべてのファイルをテキストとして扱う
      --strip-trailing-cr         入力から CR (キャリッジリターン) を除去する
      --binary                    バイナリーモードでデータを読み書きする

  -D, --ifdef=NAME                output merged file with '#ifdef NAME' diffs
      --GTYPE-group-format=GFMT   GTYPE の入力グループを GFMT で整形する
      --line-format=LFMT          すべての入力行を LFMT で整形する
      --LTYPE-line-format=LFMT    LTYPE 入力行を LFMT で整形する
    これらの書式整形オプションは -D/--ifdef に適用される diff の出力をきれいに
      見えるように制御するために提供されます。
    LTYPE is 'old', 'new', or 'unchanged'.  GTYPE is LTYPE or 'changed'.
    GFMT でのみ指定できる書式:
      %<  FILE1 からの行
      %>  FILE2 からの行
      %=  FILE1 と FILE2 で共通の行
      %[-][WIDTH][.[PREC]]{doxX}LETTER  printf 書式の LETTER
        LETTER は次の通りです。ただし古いグループでは小文字です:
          F  最初の行番号
          L  最後の行番号
          N  行数 = L-F+1
          E  F-1
          M  L+1
      %(A=B?T:E)  A と B が等しい場合は T、等しくない場合は E
    LFMT でのみ指定できる書式:
      %L  行の内容
      %l  行末にあるすべての種類の改行文字を除いた行の内容
      %[-][WIDTH][.[PREC]]{doxX}n  printf 書式の入力行
    GFMT と LFMT の両方で指摘できる書式:
      %%  %
      %c'C'  単一文字 C
      %c'\OOO'  八進数コード OOO
      C    文字 C (他の文字も同様に表す)

  -d, --minimal            差分の大きさが最小となるように違いを検出する
      --horizon-lines=NUM  差分の前後にある共通部分を NUM 行保持する
      --speed-large-files  巨大なファイルに小さな差分が分散していると仮定する

      --help               このヘルプを表示して終了する
  -v, --version            バージョン情報を表示して終了する

FILES are 'FILE1 FILE2' or 'DIR1 DIR2' or 'DIR FILE...' or 'FILE... DIR'.
  --from-file または --to-file が与えられた場合、FILE に制限はありません。
If a FILE is '-', read standard input.
  終了コードは、入力ファイルが同じ場合は 0、入力ファイルが異なる場合は 1、問題が発生したときは 2 になります。

実行例

$ cat sampleA
1
3
4
5

$ cat sampleB
1
2
3
4

$ diff sampleA sampleB
1a2
> 2
4d4
< 5

-cオプションを指定すると、コンテキスト形式 (Context format) で出力されます。

$ diff -c sampleA sampleB
*** sampleA   2014-01-30 01:00:00.000000000 +0900 ファイル1の情報
--- sampleB   2014-01-30 01:00:01.000000000 +0900 ファイル2の情報
***************
*** 1,4 **** 変更箇所は、ファイル1の1行目から4行分。ファイル2もそれに同じ。
  1
  3
  4
- 5 ファイル1にのみ存在
--- 1,4 ----
  1
+ 2 ファイル2にのみ存在
  3
  4

-uオプションを指定すると、ユニファイド形式 (Unified format) となります。

$ diff -u sampleA sampleB
--- sampleA   2014-01-30 01:00:00.000000000 +0900 ファイル1の情報
+++ sampleB   2014-01-30 01:00:01.000000000 +0900 ファイル2の情報
@@ -1,4 +1,4 @@ 変更箇所は、ファイル1の1行目から4行分。ファイル2も1行目から4行分
 1
+2 ファイル2にのみ存在
 3
 4
-5 ファイル1にのみ存在