昨天晚上写的文件转码脚本,可以遍历目录,把给出的目录下(包括子目录)的GB2312文件转成UTF-8编码的;

当然,也可以修改文件开始的常量定义来完成其他类型文件和编码之间的转换;

sh   convert2.sh    /your_path/

文件:convert2.sh
文件详细内容:

#!/bin/bash
# -*- coding: UTF-8 -*-
#
#@filename: convert2.sh
#@version: $0.2$
#@date: 2008/06/17
#@author: U{kldoo ... kldscs @gmail.com}
#@license: LGPL
#@see: 《Advanced Bash-Scripting Guide》
#  	http://wlx.westgis.ac.cn/42/
#       http://blog.csdn.net/shrekmu/archive/2006/12/20/1450643.aspx
#@note: 转换文件gb2312编码至UTF-8编码
#
FILE_TYPE=".txt"     #需转码的文件类型,所有文件的话置空
NUM_TYPE=`echo $FILE_TYPE | wc -c`   #文件类型的长度
CODING_1="GB2312"	#原文件编码
CODING_2="UTF-8" 	#转换后的编码
# 所有编码可以在shell下输入 iconv -l 查看
SUFFIX="_tmp" #零时文件的后缀

convert(){
#转换指定文件的编码
	tmp=$file$SUFFIX
	echo "Converting... $file from  $CODING_1 to $CODING_2 ."
	iconv -f $CODING_1 -t $CODING_2 $file -o $tmp
	mv $tmp $file
	#sleep 1
}

foreachd(){
#递归遍历目录
  for file in $1/*
  do
  # 如果是目录就打印处理,然后继续遍历,递归调用
    if [ -d $file ]
    then
      foreachd $file
    else
      NUM_FILE=`echo $file | wc -c`
      if [ ${file:${NUM_FILE}-${NUM_TYPE}:$NUM_TYPE} == $FILE_TYPE ]
      then
	convert "$file"
      fi
    fi
  done
}

# 遍历转换参数1目录下的文件编码
if [ $# == 1 ]
then
  foreachd "$1"
else
  echo "argv error!"
fi
# END file