红联Linux门户
Linux帮助

linux批量转换整个目录下的文件编码为UTF-8

发布时间:2015-10-02 10:51:24来源:linux网站作者:qq_20480611

#!/bin/bash -  
#================================ 

#  FILE: conv.sh 
#  
# USAGE: ./conv.sh  
#  
#   DESCRIPTION:  
#  
#   OPTIONS: --- 
#  REQUIREMENTS: --- 
#  BUGS: 目前不支持传入参数中含有空格; 
# NOTES: --- 
#AUTHOR: linkscue (scue), linkscue@gmail.com 
# COPYRIGHT: Copyright (c) 2015, linkscue 
#  REVISION: 0.1 
#  ORGANIZATION: --- 
#======================================= 
 
__ScriptVersion="0.1" 
 
#===  FUNCTION  ======================= 
# NAME:  usage 
#  DESCRIPTION:  Display usage information. 
#======================================== 
function usage () 

cat <<- EOT 
 
Usage :  $0 -s suffix1 -s suffix2 -d dir1 -d dir2 -f file1 -f file2 
 
Options: 
-h|help   Display this message 
-v|versionDisplay script version 
-s suffix Setting suffix 
-d directory  Convert all file encoding to UTF-8 
-f file   Convert a file encoding to UTF-8 
 
EOT 
}# ----------  end of function usage  ---------- 
 
#----------------------------------------------------------------------- 
#  Handle command line arguments 
#----------------------------------------------------------------------- 
 
suffixs=() 
directorys=() 
files=() 
while getopts ":hvd:f:s:" opt 
do 
case $opt in 
 
h|help )  usage; exit 0   ;; 
 
v|version  )  echo "$0 -- Version $__ScriptVersion"; exit 0   ;; 
 
f  )  files+=("$OPTARG")   ;; 
 
d  )  directorys+=("$OPTARG")   ;; 
 
s  )  suffixs+=("$OPTARG")   ;; 
 
\? )  echo -e "\n  Option does not exist : $OPTARG\n" 
usage; exit 1   ;; 
 
esac# --- end of case --- 
done 
shift $(($OPTIND-1)) 
 
# 检查输入 
if [[ ${#files} -lt 1 ]] && [[ ${#directorys} -lt 1 ]]; then 
usage 
exit 
fi 
 
TMPFILE="$(mktemp -t convXXXXXX)" 
trap "rm -f '$TMPFILE'" 0   # EXIT 
trap "rm -f '$TMPFILE'; exit 1" 2   # INT 
trap "rm -f '$TMPFILE'; exit 1" 1 15# HUP TERM 
 
#------------------------------------------------------------------------------- 
#  转换编码函数 
#------------------------------------------------------------------------------- 
conv_utf8(){ 
file="$1" 
echo "处理文件: '$file' ..." 
iconv -f gb2312 -t UTF-8 "$file" -o $TMPFILE 2> /dev/null &&\ 
mv -f $TMPFILE "$f" || { 
echo "转换失败: '${file}'" 


 
# 转换文件 
for f in "${files[@]}"; do 
conv_utf8 "$f" 
done 
 
# 转换目录文件 
if [[ ${#directorys} -gt 1 ]]; then 
if [[ ${#suffixs} -lt 1 ]]; then 
echo 
echo "请指定需转换编码的文件后缀,如 '-s txt -s java'" 
echo 
usage 
exit 
else 
for s in "${suffixs[@]}"; do 
for f in $(find $directorys -type f -name "*.${s#.}"); do 
conv_utf8 "$f" 
done 
done 
fi 
fi 


假如把这个脚本内容保存至~/bin/conv,并给予权限;

使用举例:

1. conv -f file1 -f file2 -s java -s xml -d dir1 -d dir2

2. conv -s java -d .

3. conv -s java -s xml -d android_helloworld

4. conv -f file1 -f file2

有了这个转换编码,把Windows下的工程引入到Linux上开发就轻松得多了,不再有什么字符编码读不出来的问题。


mysql创建utf-8字符集数据库:http://www.linuxdiyf.com/linux/14401.html

也谈UTF-8编码:http://www.linuxdiyf.com/linux/3793.html

ubuntu中mysql修改编码utf8:http://www.linuxdiyf.com/linux/13279.html

MySQL字符集GBK转换到UTF8:http://www.linuxdiyf.com/linux/11500.html