(関連記事 中級者のためのLinuxコマンド入門)
前回に引き続きpatchコマンドですが、今回はディレクトリへのpatchです。
まず、元となるディレクトリを作成。
~$ mkdir a ~$ (cd a;seq 9 | split -dl3) ~$ head a/* | pr -t3 ==> a/x00 <== ==> a/x01 <== ==> a/x02 <== 1 4 7 2 5 8 3 6 9 ~$
作成したディレクトリをコピーして、適当に内容を書き換えます。
~$ cp -r a b ~$ sed 's/[258]/AAA/' -i b/* ~$ head b/* | pr -t3 ==> b/x00 <== ==> b/x01 <== ==> b/x02 <== 1 4 7 AAA AAA AAA 3 6 9 ~$
ディレクトリaとbのdiffをとって、patchファイルを作成します。
~$ diff -rc a b > tmp.patch
以下のようなpatchファイルができました。
~$ cat tmp.patch diff -rc a/x00 b/x00 *** a/x00 2016-09-04 22:29:40.730086422 +0900 --- b/x00 2016-09-04 22:32:53.693288895 +0900 *************** *** 1,3 **** 1 ! 2 3 --- 1,3 ---- 1 ! AAA 3 diff -rc a/x01 b/x01 *** a/x01 2016-09-04 22:29:40.730086422 +0900 --- b/x01 2016-09-04 22:32:53.693288895 +0900 *************** *** 1,3 **** 4 ! 5 6 --- 1,3 ---- 4 ! AAA 6 diff -rc a/x02 b/x02 *** a/x02 2016-09-04 22:29:40.730086422 +0900 --- b/x02 2016-09-04 22:32:53.693288895 +0900 *************** *** 1,3 **** 7 ! 8 9 --- 1,3 ---- 7 ! AAA 9 ~$
ディレクトリaにpatchをあててみましょう。
~$ patch -p0 < tmp.patch patching file a/x00 patching file a/x01 patching file a/x02 ~$ head a/* | pr -t3 ==> a/x00 <== ==> a/x01 <== ==> a/x02 <== 1 4 7 AAA AAA AAA 3 6 9 ~$
内容がはディレクトリbと同じになりましたね。
あてたパッチを元に戻すには、-Rオプションを使います。
~$ patch -p0 -R < tmp.patch patching file a/x00 patching file a/x01 patching file a/x02 ~$ head a/* | pr -t3 ==> a/x00 <== ==> a/x01 <== ==> a/x02 <== 1 4 7 2 5 8 3 6 9 ~$
パッチをあてる対象のディレクトリ名が異なる場合は、-p1で直親のディレクトリをストリップします。
~$ cp -r a c ~$ cd c ~/c$ patch -p1 < ../tmp.patch patching file x00 patching file x01 patching file x02 ~/c$ head * | pr -t3 ==> x00 <== ==> x01 <== ==> x02 <== 1 4 7 AAA AAA AAA 3 6 9 ~/c$
同じく、あてたパッチを元に戻すには、-Rオプションです。
~/c$ patch -p1 -R < ../tmp.patch patching file x00 patching file x01 patching file x02 ~/c$ head * | pr -t3 ==> x00 <== ==> x01 <== ==> x02 <== 1 4 7 2 5 8 3 6 9 ~/c$
コメント