patch コマンドは、diff コマンドで作成した差分ファイルを適用し、元のファイルを更新 するためのコマンドです。
ソースコードの修正配布、バグ修正パッチの適用、設定ファイルの差分管理などに利用されます。
構文(Syntax)
patch [オプション] [元ファイル [パッチファイル]]
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | 標準入力からパッチを適用 | patch < fix.diff |
-pN | パスの先頭から N 階層を無視して適用 | patch -p1 < fix.diff |
-i FILE | 指定したパッチファイルを使用 | patch -i fix.diff |
-R | パッチを逆に適用(元に戻す) | patch -R < fix.diff |
-b | 元ファイルのバックアップを作成 | patch -b < fix.diff |
--dry-run | 実際には変更せずに適用可否を確認 | patch --dry-run < fix.diff |
-N | すでに適用済みの変更を無視 | patch -N < fix.diff |
-d DIR | 指定ディレクトリに移動して実行 | patch -d src -p1 < fix.diff |
実行例
差分ファイルを適用
patch -p1 < fix.diff
指定したファイルに差分を適用
patch main.c fix.diff
パッチファイルを明示的に指定
patch -i fix.diff
バックアップを作成して適用
patch -b < fix.diff
適用後、元ファイルは filename.orig という名前で残ります。
逆に適用して元に戻す
patch -R -p1 < fix.diff
適用できるか事前確認
patch --dry-run -p1 < fix.diff
エラー例(パッチが適用できない場合)
patch -p1 < wrong.diff
出力例:
Hunk #1 FAILED at 42.
1 out of 1 hunk FAILED -- saving rejects to file main.c.rej
関連コマンド
diff: ファイルやディレクトリの差分を生成git apply: Git 管理下でパッチを適用git diff: Git における差分生成cmp: 2つのファイルをバイト単位で比較
備考
-pNオプションは非常によく使われます。パッチファイルのパスがa/src/main.cのようになっている場合、-p1を指定すると先頭のa/が削除されてsrc/main.cに適用されます。- 適用に失敗した場合は
.rejファイルが生成され、そこに当てられなかった差分が記録されます。 - 元ファイルを破壊する可能性があるため、重要なファイルには必ずバックアップを取ることを推奨します。
参考
- manページ: man7.org patch(1)
- GNU patch: https://www.gnu.org/software/diffutils/manual/patch.html

コメント