言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. diff / patch

diff / patch

対応: 全Linux
macOS(2001 Cheetah)
Bash 1.0(1989)

『diff』は2つのファイルやディレクトリの差分を比較するコマンドです。『patch』は『diff』が出力した差分ファイル(パッチファイル)をファイルに適用します。バージョン管理やソフトウェアの更新に使われます。

構文

diff [オプション] ファイル1 ファイル2
patch [オプション] [元ファイル] [パッチファイル]

オプション一覧

コマンド / オプション概要
diff ファイル1 ファイル22ファイルの差分を表示します。「<」がファイル1、「>」がファイル2の行です。
diff -u ファイル1 ファイル2ユニファイド形式(unified)で差分を表示します。git diff と同じ見た目です。
diff -r ディレクトリ1 ディレクトリ2ディレクトリを再帰的に比較します。
diff -i ファイル1 ファイル2大文字小文字を無視して比較します。
diff -b ファイル1 ファイル2空白の数の違いを無視して比較します。
diff -q ファイル1 ファイル2差分があるかどうかだけを表示します(内容は表示しません)。
diff -y ファイル1 ファイル22カラム並べて比較します。
patch ファイル < パッチパッチファイルの差分をファイルに適用します。
patch -R ファイル < パッチパッチを逆適用します(変更を元に戻します)。
patch -p1 < パッチパッチファイルのパスから先頭1段のディレクトリ名を取り除いて適用します。

サンプルコード

以下のファイルを例に説明します。

original.txt
line1
line2
line3
modified.txt
line1
line2 modified
line3
line4 added

『diff -u』でユニファイド形式(git diff と同じ見た目)の差分を表示します。

diff -u original.txt modified.txt
--- original.txt	2026-03-05 10:00:00.000000000 +0900
+++ modified.txt	2026-03-05 10:01:00.000000000 +0900
@@ -1,3 +1,4 @@
 line1
-line2
+line2 modified
 line3
+line4 added

差分をパッチファイルとして保存します。

diff -u original.txt modified.txt > changes.patch

パッチファイルを適用します。

patch original.txt < changes.patch
patching file original.txt

『-R』でパッチを逆適用して変更前に戻します。

patch -R original.txt < changes.patch
patching file original.txt

『-q』で差分の有無だけを確認します(スクリプトでの判定に使います)。

diff -q original.txt modified.txt
Files original.txt and modified.txt differ

『-r』でディレクトリを再帰的に比較します。

diff -r dir1/ dir2/
diff -r dir1/config.txt dir2/config.txt
1c1
< debug=false
---
> debug=true
Only in dir2/: newfile.txt

『-y』で2カラム並べて比較します。

diff -y original.txt modified.txt
line1                 line1
line2               | line2 modified
line3                 line3
                    > line4 added

よくあるミス

よくあるミス1: diff の出力を読まずに patch を当ててしまう

差分が大きい場合や想定と違うファイルに対して patch を実行すると、意図しない箇所が変更されます。patch の実行前に必ず diff の出力を確認します。

patch original.txt changes.patch
patching file original.txt
Hunk #1 FAILED at 5.
1 out of 1 hunk FAILED -- saving rejects to file original.txt.rej

FAILED が出た場合は元ファイルのバージョンが diff 作成時と異なります。.rej ファイルを確認して手動で修正します。

よくあるミス2: diff を -u なしで実行して適用できないパッチを作る

オプションなしの diff はコンテキストなしの差分を出力するため、patch コマンドが適用できない形式になる場合があります。

diff original.txt modified.txt > changes.patch
patch original.txt changes.patch
patch: **** malformed patch at line 1:

patch との互換性がある形式はユニファイド形式(-u)です。

diff -u original.txt modified.txt > changes.patch
patch original.txt changes.patch
patching file original.txt

概要

ユニファイド形式(『-u』)の出力は「-」が削除された行、「+」が追加された行です。git が内部で使う差分形式と同じです。git を使う開発環境では直接 diff/patch を意識する場面は少ないですが、サーバー上でのパッチ適用やコードレビューツールの出力を理解するために知っておくと役立ちます。

ファイルを比較してコピーする際は『cp』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。