shell脚本中使用iconv实现批量文件转码的代码分享
在开发中,我们经常需要对N多文件编码进行更改,iconv只能对单文件的进行更改,怎么办呢?我们写一个shell脚本来解决这个问题。
例子一:使用shell脚本实现批量转码的操作。
#!/bin/sh
#
convertCodeFilePath=$1
fromCode=$2
toCode=$3
foriin{1..1}
do
[-f$convertCodeFilePath]
if[$?-eq0]
then
iconv-f$fromCode-t$toCode-c-o$convertCodeFilePath$convertCodeFilePath
if[$?-ne0]
then
echo$convertCodeFilePath"=>"convertcodefailed.
else
echo$convertCodeFilePath"=>"convertcodesuccess.
fi
break;
fi
[-d$convertCodeFilePath]
if[$?-ne0]
then
break;
fi
dir=`ls$convertCodeFilePath|sort-d`
forfileNamein$dir
do
fileFullPatch=$convertCodeFilePath/$fileName
fileType=`echo$fileName|awk-F.'{print$2}'`
[-d$fileName]
if[$?-eq0]
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[$?-ne0]
then
echo$fileName"=>"convertcodefailed.
continue
else
echo$fileName"=>"convertcodesuccess.
fi
done
done
使用方式:
shconvertCode.sh/home/sam/datagbkutf-8
例子二:简洁版
用法示例:
cd~/workspace/XXXProject ~/iconv_shell.sh./*java
好了,直接上代码~~
#!/bin/bash if["$#"!="2"];then echo"Usage:`basename$0`dirfilter" exit fi dir=$1 filter=$2 echo$1 forfilein`find$dir-name"$2"`;do echo"$file" iconv-fgbk-tutf8-o$file$file done
这里还有些修改的余地,比如源和目标编码应该作为参数,我暂时没有这个需求,懒得写了。