欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2023-11-18 15:53:58
在开发中,我们经常需要对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

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