patch – 差分ファイルを適用してファイルを更新するコマンド

差分・比較

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 ファイルが生成され、そこに当てられなかった差分が記録されます。
  • 元ファイルを破壊する可能性があるため、重要なファイルには必ずバックアップを取ることを推奨します。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント