0514-86177077
9:00-17:00(工作日)
在開發中,我們經常需要對N多文件編碼進行更改,iconv只能對單文件的進行更改,怎么辦呢?我們寫一個shell腳本來解決這個問題。
例子一:使用shell腳本實現批量轉碼的操作。
#!/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
使用方式:
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
這里還有些修改的余地,比如源和目標編碼應該作為參數,我暫時沒有這個需求,懶得寫了。
標簽:延邊 通遼 青島 朝陽 雅安 南充 隨州 西藏
上一篇:awk中NR和FNR的區別小結和實例演示
下一篇:使用iconv批量改變文件編碼的shell腳本
Copyright ? 1999-2012 誠信 合法 規范的巨人網絡通訊始建于2005年
蘇ICP備15040257號-8