linux批量将文件编码由gbk转成utf8

一、网址参考

  1、linux批量将文件编码由gbk转成utf8

  2、Vim 配置入门(阮一峰)

  3、Linux统计文件夹下的文件数目

二、实操 

     思路

    • 找出目录下的所有文件类型
    • 遍历要转码的文件类型,如.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

 

posted @ 2020-12-25 11:53  shanyu20  阅读(1633)  评论(0编辑  收藏  举报