linux下, 使用iconv命令实现文件目录编码批量转换



意图:

经常遇到文件编码转换的问题, 特别是文件目录批量转换, 不想一个一个的转, 所以写了个shell脚本, 一劳永逸


脚本适用环境:

linux环境, 并且可以使用iconv命令, 如果没有iconv命令, 可以通过编译iconv源码来安装


附shell脚本:

if [ $# != 4 ]
then
    echo -e  "\n脚本需要四个参数"
    echo -e  "  参数1: 原始编码格式\n  参数2:目标编码格式\n  参数3: 待转码的文件目录\n  参数4: 转码后的文件目录\n"
    echo -e  "示例: icon.sh  from_encoding  to_encoding  in_dir  out_dir\n"
    exit
else
    FROM_ENCODING=$1
    TO_ENCODING=$2
    IN_DIR=$3
    OUT_DIR=$4
fi


#参数:两个参数, 输入目录和输出目录
#功能:使输出目录中目录树与输入目录相同
function create_outDirTree()
{
    in_dir=$1
    out_dir=$2

    for dir in `find $in_dir -type d`
    do
        sub_dir=`echo $dir|awk -F "$in_dir" '{print $2}'`
        new_dir=${out_dir}/$sub_dir
        mkdir -p $new_dir    
    done
}


#参数: 四个参数, 原始编码、目标编码、原始文件、目标文件
#功能: 实现文件的编码转换
function iconv_file()
{
   iconv -f $1  -t $2 $3 -o $4 1>iconvLog 2>&1

   errString=`cat iconvLog|grep "illegal input sequence"`
   
   if [ -z "$errString" ]
   then
        :
   else
        echo -e "$3\n   $errString"
   fi

   rm -rf iconvLog
}


#功能: 将源目录中的所有文件进行编码转换, 输出到另一目录, 源目录文件保持不变
function main()
{
    create_outDirTree $IN_DIR $OUT_DIR
    
    for f in `find $IN_DIR -type f`
    do
        fname=`echo $f|awk -F "$IN_DIR" '{print $2}'`
        out_fname=$OUT_DIR/$fname
        iconv_file $FROM_ENCODING $TO_ENCODING $f $out_fname
    done

}



#主程序
main


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值