ディレクトリへのpatch

(関連記事 中級者のための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$ 

コメント

タイトルとURLをコピーしました