タイトル: diff ファイルの差分抽出
本稿はLinuxコマンドであるdiffの説明をします。2つのファイル、または2つのディレクトリの差分を抽出する基本コマンドです。
diffとは
指定した2つのファイルの差分を抽出することができるコマンドです。設定ファイルの変更前後の比較、修正前後のソース比較、本番/開発環境の差分確認などで頻繁に使います。
基本
|
$ diff file1 file2 |
違いが無ければ何も出力されません。違いがあれば、行番号と差分行が表示されます。
実行例
|
$ diff -u file1 file2 |
-uオプションを付与することで差分がわかりやすく表示される(unified形式、gitやpatchで一般的)。
-yを付与すると2つのファイルを横並びに比較することができる。
よく使うオプション
| オプション | 意味 |
|---|---|
-u | unified形式で表示(最も読みやすい) |
-y | 横並びで2列表示 |
-i | 大文字小文字を区別しない |
-w | 空白文字の違いを無視 |
-B | 空行を無視 |
-q | 差分の有無だけ報告(内容は出さない) |
-r | ディレクトリ同士を再帰的に比較 |
--brief | -q と同じ |
ディレクトリ同士の比較
|
$ diff -r dir1 dir2 |
パッチを作る・当てる
差分をファイル化(パッチ)して、別の場所で適用できます。
|
# パッチ作成 |
使用例
|
# 設定ファイルの変更前後を確認 |
関連コマンド
cmp: バイナリレベルで一致するか確認vimdiff/vim -d: Vimで対話的に差分編集git diff: gitリポジトリ内の差分colordiff: 色付き表示版(要インストール)
注意点
- 改行コード(LF/CRLF)の違いも差分として出る。気になる場合は
dos2unixで揃える - 大きなファイル同士の
diff -yは読みにくい。-uの方が実用的 - 巨大ディレクトリ同士の
diff -rは時間がかかる。-qで軽量化
関連
- 親カテゴリ: コマンド一覧 (Linuxコマンド群)