找出Z:\A、Z:\B目录下所有内容带“APPLE“的文件,把"APPLE"替换成"ORANGE",并输出到Z:\C相应的目录下
1 #!/bin/sh
2 # Auto replace the files' content and copy them to the specified directory.
3
4 SEARCH_WORD='APPLE'
5 REPLACE_WORD='ORANGE'
6
7 SRC_DIR_ARRAY=(
8 'Z:/A'
9 'Z:/B'
10 )
11
12 OUTPUT='Z:/C'
13
14 global_lastDir_pre=''
15 declare -i count=0
16
17 function checkFileDir
18 {
19 local fileNameWithPath=$1
20 local dirPre=${fileNameWithPath%/*}
21 local tempPath=${OUTPUT}/${dirPre}
22 global_lastOutput=$OUTPUT/$fileNameWithPath
23
24 if [ ! -d "$tempPath" ]
25 then
26 tar -cf - "$fileNameWithPath" | tar -C "$OUTPUT" -xf -
27 rm -f "$global_lastOutput"
28 fi
29
30 }
31
32 function replaceFile
33 {
34 local fileNameWithPath=${1#*/}
35 local regix=$2
36 local thisDir_pre=${fileNameWithPath%/*}
37
38 if [ "$thisDir_pre" = "$global_lastDir_pre" ]
39 then
40 sed "$regix" "$fileNameWithPath" > "$global_lastOutput"
41 continue
42 fi
43
44 checkFileDir "$fileNameWithPath"
45 global_lastDir_pre=$thisDir_pre
46
47 sed "$regix" "$fileNameWithPath" > "$global_lastOutput"
48 }
49
50 function echoNote
51 {
52 echo "Wrong directory detected. Please check it !"
53 }
54
55 function init
56 {
57 for src_dir in ${SRC_DIR_ARRAY[*]}
58 do
59 if [ ! -d "$src_dir" ]
60 then
61 echoNote
62 echo "SRC_DIR_ARRAY: '$src_dir'"
63 exit
64 fi
65 done
66
67 if [ ! -d "$OUTPUT" ]
68 then
69 echoNote
70 echo "OUTPUT: '$OUTPUT'"
71 exit
72 fi
73
74 rm -rf "$OUTPUT"
75 mkdir "$OUTPUT"
76
77 }
78
79
80 echo -e "----------------------------BEGIN--------------------------------\n"
81
82 init
83 for src_dir in ${SRC_DIR_ARRAY[*]}
84 do
85
86 cd "$src_dir"
87 list=`find . -type f | xargs grep -l "$SEARCH_WORD"`
88 #list=`find . -type f | xargs grep -il "$SEARCH_WORD"` # ignore case
89 for line in $list
90 do
91 grep -Hn "$SEARCH_WORD" "$line" >> "$OUTPUT/log.txt"
92 #grep -iHn "$SEARCH_WORD" "$line" >> "$OUTPUT/log.txt" # ignore case
93 count=count+1
94 echo $line
95 replaceFile "$line" "s/$SEARCH_WORD/$REPLACE_WORD/g"
96 #replaceFile "$line" "s/$SEARCH_WORD/$REPLACE_WORD/Ig" # ignore case
97 done
98
99 done
100
101 echo -e "\n----------summary----------"
102 echo "total files size: $count"
103
104 echo "----------------------------END--------------------------------"
105