ファイルを比較できます。
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 になります。
diffで作成された差分ファイルは、patchで結合できます。
$ 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にのみ存在