linux批量修改文件编码格式(包含子目录)

背景

项目工程文件编码格式有utf-8,也有gb2312,在通过Source Insight 4.0打开文件只能设置一种默认编码格式UTF-8/Windows ANSI/GB2312,不能自动识别文件本身的编码格式,这就导致总有一部分文件打开后,注释是乱码,影响阅读和使用。

为解决该问题,寻找批量文件编码格式转换工具(包括子目录)。

1.安装enca

enca是Linux下的文件编码转换工具。

enca的安装请参考:
https://blog.csdn.net/mayue_web/article/details/89384982

查看是否安装enca:

enca --version

已安装,会显示enca版本,如下图:
在这里插入图片描述
未安装:
在这里插入图片描述

2.通过shell脚本批量修改编码格式

安装enca后,通过 enca -x utf-8 * 可将本目录下所有文件编码格式修改为utf-8格式,但是它不能遍历子文件夹,故要跟find命令配合。
在这里插入图片描述
上面这段代码可以搜索当前目录下及所有子目录的cpp和h格式的文件。

utf-8编码格式的转换脚本如下:
在这里插入图片描述

cli="find . -type f \( "
for arg in ${@:1:$#-1}
do
	cli="$cli -iname \*.$arg -o "
done
cli="$cli -iname \*.${@: -1} \)"
#echo $cli
PRE_IFS=$IFS
IFS=$'\n'
for i in `eval $cli`
do
	enca -x utf-8 $i
done
IFS=$PRE_IFS
echo "ok!"

通过chmod赋予toUTF8.sh运行权限,然后把它拷贝进~/bin 文件夹中,这样这条命令就在环境变量里了,可以随处使用。

chmod 777 toUTF8.sh

若需修改编码格式为其他格式,只需替换utf-8即可,可选项有GB2312,

3.脚本使用示范

使用示范:进入待处理文件夹的根目录,输入参数 cpp h c,即把根目录内所有cpp、h、c文件改成了utf-8字符集。脚本写成了可以接受指定文本格式的形式,这样比较灵活和通用。
在这里插入图片描述
好了文件统一转换为UTF-8编码格式了。

此时通过Source Insight 4.0以utf-8为默认编码格式打开,则注释不在乱码;

以后有遇到这种事,就能直接用它来处理就完事了。

4.enca查看文件编码格式

enca `ls`

在这里插入图片描述

参考资料:
https://blog.csdn.net/rush_mj/article/details/79705355
https://blog.csdn.net/gatieme/article/details/55045883

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值