在开发中,我们经常需要对N多文件编码进行更改,iconv只能对单文件的进行更改,怎么办呢?我们写一个shell脚本来解决这个问题。
例子一:使用shell脚本实现批量转码的操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/bin/sh # convertCodeFilePath=$1 fromCode=$2 toCode=$3 for i in {1..1} do [ -f $convertCodeFilePath ] if [ $? - eq 0 ] then iconv -f $fromCode -t $toCode -c -o $convertCodeFilePath $convertCodeFilePath if [ $? - ne 0 ] then echo $convertCodeFilePath "=>" convert code failed. else echo $convertCodeFilePath "=>" convert code success. fi break ; fi [ -d $convertCodeFilePath ] if [ $? - ne 0 ] then break ; fi dir =` ls $convertCodeFilePath | sort -d` for fileName in $ dir do fileFullPatch=$convertCodeFilePath/$fileName fileType=` echo $fileName | awk -F. '{print $2}' ` [ -d $fileName ] if [ $? - eq 0 ] then continue fi if [ $fileType != 'sh' ] && [ $fileType != 'py' ] && [ $fileType != 'xml' ] && [ $fileType != 'properties' ] \ && [ $fileType != 'q' ] && [ $fileType != 'hql' ] && [ $fileType != 'txt' ] then continue fi iconv -f $fromCode -t $toCode -c -o $fileFullPatch $fileFullPatch if [ $? - ne 0 ] then echo $fileName "=>" convert code failed. continue else echo $fileName "=>" convert code success. fi done done |
使用方式:
1
|
sh convertCode.sh /home/sam/data gbk utf-8 |
例子二:简洁版
用法示例:
1
2
3
|
cd ~ /workspace/XXXProject ~ /iconv_shell .sh ./ *java |
好了,直接上代码~~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/bash if [ "$#" != "2" ]; then echo "Usage: `basename $0` dir filter" exit fi dir =$1 filter=$2 echo $1 for file in ` find $ dir -name "$2" `; do echo "$file" iconv -f gbk -t utf8 -o $ file $ file done |
这里还有些修改的余地,比如源和目标编码应该作为参数,我暂时没有这个需求,懒得写了。