在开发中,我们经常需要对N多文件编码进行更改,iconv只能对单文件的进行更改,怎么办呢?我们写一个shell脚本来解决这个问题。
例子一:使用shell脚本实现批量转码的操作。#!/bin/sh #convertCodeFilePath=$1 fromCode=$2 toCode=$3for 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; fidir=`ls $convertCodeFilePath | sort -d`for fileName in $dir do fileFullPatch=$convertCodeFilePath/$fileNamefileType=`echo $fileName |awk -F. "{print $2}"`[ -d $fileName ] if [ $? -eq 0 ] then continue fiif [ $fileType != "sh" ] && [ $fileType != "py" ] && [ $fileType != "xml" ] && [ $fileType != "properties" ] && [ $fileType != "q" ] && [ $fileType != "hql" ] && [ $fileType != "txt" ] then continue fiiconv -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使用方式:
sh convertCode.sh /home/sam/data gbk utf-8
例子二:简洁版用法示例:
cd ~/workspace/XXXProject ~/iconv_shell.sh ./ *java
好了,直接上代码~~
#!/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
这里还有些修改的余地,比如源和目标编码应该作为参数,我暂时没有这个需求,懒得写了。