linux下GBK->UTF-8文件编码批量转换脚本

qiaosym 2010-09-12

个人技术博客:http://demi-panda.com  

nux命令行下查看看文件的编码

enca文件名

linux文件名编码批量转换

convmv-f源编码-t新编码[选项]文件名

常用参数:

-r递归处理子文件夹

–notest真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。

–list显示所有支持的编码

–unescap可以做一下转义,比如把%20变成空格

比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:

convmv-fUTF-8-tGBK--notestutf8编码的文件名

Linux下批量转换文件内容编码

1.使用enca,例如要把当前目录下的所有文件都转成utf-8

$enca-xutf-8*

2,使用iconv转换

iconv的命令格式如下:

iconv-fencoding-tencodinginputfile

比如将一个UTF-8编码的文件转换成GBK编码

iconv-fGBK-tUTF-8file1-ofile2

mysqlgbk转utf8

linux下GBK->UTF-8文件编码批量转换脚本

-

finddefault-typed-execmkdir-putf/{};

finddefault-typef-execiconv-fGBK-tUTF-8{}-outf/{};

这两行命令将default目录下的文件由GBK编码转换为UTF-8编码,目录结构不变,转码后的文件保存在utf/default目录下。

mysqlgbk转utf8

经过两天的尝试,mysq数据转码终于告一段落

起因:gbk编码,用脚本python处理导入数据的时候,某些汉字乱码,为了根治,决定把数据库转码

环境linux,secretcrt,mysql5.1.14-beta

1.数据库按gbk导出(mysqldump-urootdb_rdm--default-character-setgbk-pdb_rdm.sql)

2.创建为utf8库,如(createdatabasedb_rdm_testDEFAULTCHARACTERSETutf8COLLATEutf8_general_ci;)

3.把一下shell保存执行

DB='db_rdm_test'

sed's/gbk/utf8/g'db_rdm_gbk.sql_bak|iconv-fgb18030-tutf-8>$DB.sql

mysql-uroot--default-character-set=utf8$DB<$DB.sql

说明:find命令,配合-exec参数,可以对查询的文件进行进一步的操作,可以得到很多有用的功能,比如说文件包含特定字符串的查询等,要了解这个功能,最简单直接的就是看find命令帮助,列出

-execcommand;

Executecommand;trueif0statusisreturned.Allfollowingargumentstofindaretakentobeargumentstothecommanduntilanargumentconsistingof#;'isencountered.Thestring{}'isreplacedbythecurrentfilenamebeingprocessedeverywhereitoccursintheargumentstothecommand,notjustinargumentswhereitisalone,asinsomeversionsoffind.Bothoftheseconstructionsmightneedtobeescaped(witha\')orquotedtoprotectthemfromexpansionbytheshell.Thecommandisexecutedinthestartingdirectory.

其实只要读懂这段话就理解了

废话少说,这里简单说明一下

-exec参数后面跟的是command命令,注意点如下:

command命令的终止,使用';'(分号)来判定,在后面必须有一个';'

'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理

特别强调,对于不同的系统,直接使用分号可能会有不同的意义,使用转义符'\'在分号前明确说明,对于前面我们遇到的问题,主要就是这个原因引起的!

举例:

1.查询所有保护字符串“Hello”的文件

find/-execgrep"Hello"{}\;

2.删除所有临时文件

find/-name"*.tmp"-execrm-f{}\;

相关推荐