linux 循环iconv,shell脚本中使用iconv实现批量文件转码的代码分享

在开发中,我们经常需要对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

这里还有些修改的余地,比如源和目标编码应该作为参数,我暂时没有这个需求,懒得写了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值