linux批量将文件编码由gbk转成utf8
一、网址参考
2、Vim 配置入门(阮一峰)
二、实操
思路
- 找出目录下的所有文件类型
- 遍历要转码的文件类型,如.c和.h
- 利用vim的set fileencoding=utf8进行转码
步骤:
1、修改vim配置,设置~/.vimrc
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8 set ts=4 set expandtab
2、找出目录下的所有文件类型
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
3、编写转码的脚本 gbk_to_utf8.sh和gbk_utf8.vi
1)gbk_to_utf8.sh
#!/bin/bash for i in `find -name \*.[ch]` do vim -s gbk_utf8.vi $i done
2) gbk_utf8.vi
:set fileencoding=utf8
:wq!
4)在当前目录下执行转码脚本:
./gbk_to_utf8.sh
方法二:
1. 脚本程序
1)参考文档1:shell中#*,##*,#*,##*,% *,%% *的含义及用法
2)参考文档2:Linux命令:iconv & enca(文件内容转码的工具)(常用于中文内容转码)
#!/bin/sh _func_list() { local _dir="$1" dirs=`ls $_dir` for file in $dirs do if [ -d $_dir/$file ]; then _func_list $_dir/$file else file_path=$_dir/$file file_suf=${file_path##*.} #获取文件后缀名 if [ "$file_suf" = "c" -o "$file_suf" = "h" ]; then is_gb2312=`enca $file_path | grep GB2312` if [ -n "$is_gb2312" ]; then iconv -f GB18030 -t utf-8 $file_path > $file_path.utf8 if [ "$?" != "0" ]; then echo "iconv $file_path error" exit 1 else mv $file_path.utf8 $file_path fi fi fi fi done } _func_list $1