ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
centerpoint
帖子: 95
注册时间: 2009-11-30 19:38

ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#1

帖子 centerpoint » 2010-01-06 13:35

代码: 全选

#!/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
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#2

帖子 eexpress » 2010-01-06 14:09

支持练习
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#3

帖子 xiooli » 2010-01-06 14:48

用code括起来比较好看点。
头像
qingdaoocean
帖子: 2753
注册时间: 2009-05-16 8:47

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#4

帖子 qingdaoocean » 2010-01-06 15:08

:em11
“飞达”——武汉理工大学开源技术协会http://vedaclub.org/
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#5

帖子 IDRI » 2010-08-12 14:20

:em11
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#6

帖子 tusooa » 2010-08-13 8:32

代码: 全选

find dir -maxdepth N -name '<glob>' -exec enconv '{}' ';'
好了。
转到GBK,-exec后面加env LANG=zh_CN.GBK

代码: 全选

#扫描的文件类型。默认txt
为什么一定要是.txt???
文本文件吾一般都不加扩展名的。

代码: 全选

] ls -ld //
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#7

帖子 ghostry » 2010-08-13 9:20

看起来很专业啊
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
bekars
帖子: 27
注册时间: 2008-02-19 15:33

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#8

帖子 bekars » 2010-08-13 9:31

转换的文件可以先备份,如果发现转换错了还可以恢复。

写个函数,用一句find就可以搞定。
头像
wlzyan
帖子: 504
注册时间: 2008-08-16 15:09
来自: 没有海一样的胸怀,哪能有海一样的事业.

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#9

帖子 wlzyan » 2010-08-13 10:33

支持! :em11
只有零售才能产生利润,其它都是成本.
头像
thomasxie
帖子: 317
注册时间: 2009-11-22 15:29
联系:

Re: ubuntu linux下批量转换(utf8到gb)文件编码的脚本习作

#10

帖子 thomasxie » 2010-12-13 13:09

:em11
时间就像一张网,你撒在那里,你的收获就在那里。
回复