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