当前位置 博文首页 > shell脚本中使用iconv实现批量文件转码的代码分享

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

    作者:admin 时间:2021-04-28 11:59

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

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

    js