代码: 全选
#!/bin/bash
#功能:本程序可以把utf8文本文件转换成gb2312编码。如需转换其他编码小小的改动即可实现。因为我的palm不支持utf8文本,所以写了这个脚本。
#与朋友们共享!如果大家有好的修改意见,欢迎给我留言。ubuntu.org.cn centerpoint
#用法:maxdepth 跟的数是目录深度,1为本目录。把本文件保存为iconv.sh,把权限设为“可执行”,然后复制到要转换的html文件目录。在终端下cd到那个目录。
#执行 ./iconv 即可。
#已知bug:由于iconv的缺陷,部分文件部分字符转换不完整。所以强烈建议转换前备份。若用enconv替换iconv可解决.
#但enconv ubuntu9.10默认没有,为了通用性,采用系统自带的iconv.另外file命令对部分 utf8文件编码识别不出来,
#导致放过某些文件没有转换。如果自己确认文件夹里都是utf8文件,启用第二个if.
#作者:centerpoint 2010.1.6
#扫描的文件类型。默认txt
find ./ -maxdepth 1 -name '*.txt'>files.mybak
myi=0
while read line
do
filename="${line##*/}";
#判断文件编码。如果不判断,原来的非utf文件会被破坏!!!!
mytype=`file --mime-encoding -b "${filename}"`
mytype=`echo $mytype |cut -c 1-3`
echo $filename
echo $mytype
#file命令对部分 utf8文件编码识别不出来,导致放过某些文件没有转换。如果自己确认文件夹里都是utf8文件,
#启用第二个if.若有非utf8文件,原来的非utf文件会被破坏!!!!
if [ $mytype = utf ]
#if [ '' = '' ]
then
myi=`echo "$myi+1"|bc`
echo "************************$myi***************************"
echo "$filename" >>fileutf.mybak
mv "${filename}" "${filename}".mybak
#要转换utf8到其他编码,改变 -t 后面的编码
iconv -f UTF-8 -t GB2312 -c "`echo ${filename}.mybak`" > "${filename}"
fi
done < files.mybak
#转换无误后,执行rm *.mybak删除产生的垃圾文件。转换有误则恢复之。被转换的文件列表在fileutf.mybak