1 |
#!/bin/bash
|
2 |
|
3 |
dodiff=0
|
4 |
force=0
|
5 |
single=0
|
6 |
while [ $# -gt 0 ]; do
|
7 |
case $1 in
|
8 |
-d)
|
9 |
dodiff=1
|
10 |
shift
|
11 |
;;
|
12 |
-f)
|
13 |
force=1
|
14 |
shift
|
15 |
;;
|
16 |
-s)
|
17 |
single=1
|
18 |
shift
|
19 |
;;
|
20 |
*)
|
21 |
break
|
22 |
;;
|
23 |
esac
|
24 |
done
|
25 |
|
26 |
cpr(){
|
27 |
if [ $dodiff -eq 1 ]; then
|
28 |
if [ $single -eq 0 ]; then
|
29 |
for entry in $(ls $2); do
|
30 |
if [ $entry = "CVS" -o $(expr "$entry" : '[^~]*[~]') -ne 0 ]; then
|
31 |
continue
|
32 |
fi
|
33 |
|
34 |
if [ -e $1/$entry ]; then
|
35 |
continue
|
36 |
fi
|
37 |
|
38 |
if [ -d $2/$entry ]; then
|
39 |
echo "###Patch: Directory $1/$entry does not exist"
|
40 |
elif [ -f $2/$entry ]; then
|
41 |
echo "###Patch: File $1/$entry does not exist"
|
42 |
fi
|
43 |
|
44 |
done
|
45 |
fi
|
46 |
fi
|
47 |
|
48 |
for entry in $(ls $1); do
|
49 |
if [ $entry = "CVS" -o $(expr "$entry" : '[^~]*[~]') -ne 0 ]; then
|
50 |
continue
|
51 |
fi
|
52 |
|
53 |
if [ -d $1/$entry -a ! -e $2/$entry ]; then
|
54 |
if [ $dodiff -eq 1 ]; then
|
55 |
echo "###Patch: Directory $2/$entry does not exist"
|
56 |
continue
|
57 |
else
|
58 |
echo "###Patch: mkdir $2/$entry"
|
59 |
mkdir $2/$entry
|
60 |
fi
|
61 |
fi
|
62 |
|
63 |
if [ -d $1/$entry ]; then
|
64 |
cpr $1/$entry $2/$entry
|
65 |
else
|
66 |
if [ $dodiff -eq 1 ]; then
|
67 |
if [ -e $2/$entry ]; then
|
68 |
echo "###Patch: diff $1/$entry $2/$entry"
|
69 |
diff $1/$entry $2/$entry
|
70 |
echo ""
|
71 |
else
|
72 |
echo "###Patch: File $2/$entry does not exist"
|
73 |
fi
|
74 |
else
|
75 |
if [ ! -e $2/$entry -o -n "$(diff $1/$entry $2/$entry)" ]; then
|
76 |
copy=0
|
77 |
if [ -e $2/$entry -a $force -eq 0 ]; then
|
78 |
copy=-1
|
79 |
while [ $copy -lt 0 ]; do
|
80 |
echo "###Patch: Overwrite $2/$entry? (Y=yes|n=no|d=diff)"
|
81 |
read answer
|
82 |
case $answer in
|
83 |
'Y')
|
84 |
copy=1
|
85 |
;;
|
86 |
'n')
|
87 |
copy=0
|
88 |
;;
|
89 |
'd')
|
90 |
echo "###Patch: diff $1/$entry $2/$entry"
|
91 |
diff $1/$entry $2/$entry
|
92 |
;;
|
93 |
*)
|
94 |
;;
|
95 |
esac
|
96 |
done
|
97 |
else
|
98 |
copy=1
|
99 |
fi
|
100 |
if [ $copy -eq 1 ]; then
|
101 |
echo "###Patch: cp $1/$entry $2/"
|
102 |
cp $1/$entry $2/
|
103 |
fi
|
104 |
fi
|
105 |
fi
|
106 |
fi
|
107 |
done
|
108 |
}
|
109 |
|
110 |
if [ ! -d "$1" -o ! -d "$2" ]; then
|
111 |
echo "Usage: patch DIR1 DIR2"
|
112 |
exit 1
|
113 |
fi
|
114 |
|
115 |
cpr $1 $2
|
116 |
|
117 |
|