diff -u -rと patch -p -d コマンド (ディレクトリ単位の操作)

まず、実験の準備

/home/hirasawa/desktop/diff_patch
hirasawa@ubu1204:~/desktop/diff_patch$ cat prepare.sh 
#!/bin/bash
for dir in orig_dir revised_dir
do
  mkdir $dir 
  for i in 1a 1b
  do 
    for j in 2a 2b; 
    do 
      mkdir -p $dir/$i/$j; 
      echo $dir/$i/$j > $dir/$i/$j/$i-$j.txt 
    done 
  done
done

hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ find orig_dir revised_dir/
orig_dir
orig_dir/1b
orig_dir/1b/2a
orig_dir/1b/2a/1b-2a.txt
orig_dir/1b/2b
orig_dir/1b/2b/1b-2b.txt
orig_dir/1a
orig_dir/1a/2a
orig_dir/1a/2a/1a-2a.txt
orig_dir/1a/2b
orig_dir/1a/2b/1a-2b.txt
revised_dir/
revised_dir/1b
revised_dir/1b/2a
revised_dir/1b/2a/1b-2a.txt
revised_dir/1b/2b
revised_dir/1b/2b/1b-2b.txt
revised_dir/1a
revised_dir/1a/2a
revised_dir/1a/2a/1a-2a.txt
revised_dir/1a/2b
revised_dir/1a/2b/1a-2b.txt
hirasawa@ubu1204:~/desktop/diff_patch$

通例?に従い、パッチ作成はドットなしでつくってみる

hirasawa@ubu1204:~/desktop/diff_patch$ diff -u -r orig_dir revised_dir >dirWOdot.patch
hirasawa@ubu1204:~/desktop/diff_patch$ cat dirWOdot.patch 
diff -u -r orig_dir/1a/2a/1a-2a.txt revised_dir/1a/2a/1a-2a.txt
--- orig_dir/1a/2a/1a-2a.txt	2013-05-23 13:16:29.228669556 +0900
+++ revised_dir/1a/2a/1a-2a.txt	2013-05-23 13:16:29.252669681 +0900
@@ -1 +1 @@
-orig_dir/1a/2a
+revised_dir/1a/2a
diff -u -r orig_dir/1a/2b/1a-2b.txt revised_dir/1a/2b/1a-2b.txt
--- orig_dir/1a/2b/1a-2b.txt	2013-05-23 13:16:29.232669593 +0900
+++ revised_dir/1a/2b/1a-2b.txt	2013-05-23 13:16:29.256669702 +0900
@@ -1 +1 @@
-orig_dir/1a/2b
+revised_dir/1a/2b
diff -u -r orig_dir/1b/2a/1b-2a.txt revised_dir/1b/2a/1b-2a.txt
--- orig_dir/1b/2a/1b-2a.txt	2013-05-23 13:16:29.236669602 +0900
+++ revised_dir/1b/2a/1b-2a.txt	2013-05-23 13:16:29.268669752 +0900
@@ -1 +1 @@
-orig_dir/1b/2a
+revised_dir/1b/2a
diff -u -r orig_dir/1b/2b/1b-2b.txt revised_dir/1b/2b/1b-2b.txt
--- orig_dir/1b/2b/1b-2b.txt	2013-05-23 13:16:29.240669612 +0900
+++ revised_dir/1b/2b/1b-2b.txt	2013-05-23 13:16:29.272669776 +0900
@@ -1 +1 @@
-orig_dir/1b/2b
+revised_dir/1b/2b
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ cp -pr orig_dir test_dir
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ ls -ltr
合計 36
-rw-rw-r-- 1 hirasawa hirasawa  176  5月 23 12:20 test.patch
-rw-rw-r-- 1 hirasawa hirasawa   49  5月 23 12:33 revised.txt
-rw-rw-r-- 1 hirasawa hirasawa   16  5月 23 12:33 orig.txt
-rw-rw-r-- 1 hirasawa hirasawa   16  5月 23 12:43 test.txt
-rwxrwxr-x 1 hirasawa hirasawa  210  5月 23 13:16 prepare.sh
drwxrwxr-x 4 hirasawa hirasawa 4096  5月 23 13:16 test_dir
drwxrwxr-x 4 hirasawa hirasawa 4096  5月 23 13:16 orig_dir
drwxrwxr-x 4 hirasawa hirasawa 4096  5月 23 13:16 revised_dir
-rw-rw-r-- 1 hirasawa hirasawa  976  5月 23 13:28 dirWOdot.patch
hirasawa@ubu1204:~/desktop/diff_patch$ 
hirasawa@ubu1204:~/desktop/diff_patch$ patch -p1 test_dir < ./dirWOdot.patch 
patch: **** File test_dir is not a regular file -- can't patch
hirasawa@ubu1204:~/desktop/diff_patch$ patch -p1 -d test_dir < ./dirWOdot.patch  
patching file 1a/2a/1a-2a.txt
patching file 1a/2b/1a-2b.txt
patching file 1b/2a/1b-2a.txt
patching file 1b/2b/1b-2b.txt
hirasawa@ubu1204:~/desktop/diff_patch$ diff -r test_dir orig_dir
diff -r test_dir/1a/2a/1a-2a.txt orig_dir/1a/2a/1a-2a.txt
1c1
< revised_dir/1a/2a
---
> orig_dir/1a/2a
diff -r test_dir/1a/2b/1a-2b.txt orig_dir/1a/2b/1a-2b.txt
1c1
< revised_dir/1a/2b
---
> orig_dir/1a/2b
diff -r test_dir/1b/2a/1b-2a.txt orig_dir/1b/2a/1b-2a.txt
1c1
< revised_dir/1b/2a
---
> orig_dir/1b/2a
diff -r test_dir/1b/2b/1b-2b.txt orig_dir/1b/2b/1b-2b.txt
1c1
< revised_dir/1b/2b
---
> orig_dir/1b/2b
hirasawa@ubu1204:~/desktop/diff_patch$ diff -r test_dir revised_dir