今日の人気記事

  1. zip - ファイルを圧縮 - Linuxコマンド
  2. sleep - 指定した時間だけ処理を遅延 - Linuxコマンド
  3. su - ユーザーを変更する - Linuxコマンド
  4. chown - ファイルの所有者やグループを変更 - Linuxコマンド
  5. tar - アーカイブの作成・展開 - Linuxコマンド

patch - diff差分ファイルをオリジナルファイルに適用 - Linuxコマンド

スポンサーリンク

patchコマンドは、diffコマンドで作成した差分ファイルをオリジナルファイル(あるいは逆)に適用するコマンドです。

patchコマンド

書式

patch [オプション] [オリジナルファイル [パッチファイル]]
patch < パッチファイル

コマンドを実行するとパッチファイルの形式を自動判別します。オプション -c(context形式)、-e(edスクリプト形式)、-n(RCS形式)、-u(unified形式)を指定した場合、自動判別を行いません。

オプション

-bファイルにパッチをあてるときにバックアップファイルを作成します。
-cパッチファイルをcontext形式として認識します。
-d ディレクトリ指定したディレクトリに移動し、パッチを適用します。
-eパッチファイルをedスクリプトとして認識します。
-f問い合わせを行いません。
-lタブやスペースを無視します。
-nパッチファイルをRCS形式として認識します。
-R新旧ファイルが反転しているとみなします。リバースパッチをあてるときは、このオプションを使います。
-uパッチファイルをunified形式として認識します。

使用例

まず、diffコマンドを使って、パッチファイルを作成します。ここでは、unified形式(オプション -u)を使って、パッチファイルを作成していますが、context形式(オプション -c)でも構いません。

$ diff -u old.txt new.txt > diff.patch

作成したパッチファイルの中身をみてみましょう。

$ cat diff.patch 
--- old.txt	2013-11-25 13:49:22.750920731 +0900
+++ new.txt	2013-11-25 13:49:37.294919860 +0900
@@ -1,4 +1,4 @@
-pello
-abcde
+hello
+ABCDE
 12345

パッチファイルを適用します。古いファイル(old.txt)にパッチが適用され、新しいファイル(new.txt)と同じ内容に戻ります。

$ patch < diff.patch 
patching file old.txt

ファイルが同一かどうかをdiffコマンドで、確認します。以下のようにidenticalと出力されれば、2つのファイルは同じものです。

$ diff -s old.txt new.txt
Files old.txt and new.txt are identical

リバースパッチを適用します(オプション -R)。古いファイル(old.txt)にリバースパッチが適用され、新しくなった内容が元の古い内容に戻します。

$ patch -R < diff.patch 
patching file old.txt

関連コマンド

diff

関連記事(一部広告含む)