shell脚本中使用iconv实现批量文件转码的代码分享
程序员文章站
2024-01-04 14:24:16
在开发中,我们经常需要对n多文件编码进行更改,iconv只能对单文件的进行更改,怎么办呢?我们写一个shell脚本来解决这个问题。
例子一:使用shell脚本实现批量转码...
在开发中,我们经常需要对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
这里还有些修改的余地,比如源和目标编码应该作为参数,我暂时没有这个需求,懒得写了。