坑*的 Android 老师,期末考试让我们在他给出的项目上继续写代码。。。然而,给出的项目中,java 代码部分用的是GB2312,其他地方用的都是 UTF-8,简直坑*。
由于 Mac/Linux 自带一个 iconv ,可以转换文件编码,所以可以借用这个命令来进行文件编码的批量转换。
进入主题,,直接贴代码
#!/bin/bash
find *.$1 -exec sh -c "iconv -f $2 -t $3 {} > {}.temp" \;
find *.$1 -exec rm {} \;
rename 's/\.temp$//' *.temp
注意:
有些版本的 osx 是不自带 rename 的,比如我目前(2016年12月)使用的osx10.12.2,需要自己安装rename 才可以使用,安装方式很简单,使用brew install rename
安装就可以了。
如果你连 brew 都没装(请容许我做一个鄙视的表情)。。。请自行百度 brew 安装方式。
ps:如果你不想装 brew 或者或者不想安装 rename,可以使用这个版本的代码
#!/bin/bash
find *.$1 -exec sh -c "iconv -f $2 -t $3 {} > {}.temp" \;
find *.$1 -exec rm {} \;
for files in *.temp
do
mv $files ${files%.temp}
done
使用方式:
按顺序传入三个参数:
要转码的文件拓展名 源编码 目的编码
e.g.
alliconv.sh java gb2312 utf8
ps:
Mac 用户,如果你想把这个 shell 变为系统命令,你会发现 /usr/bin ,/usr/sbin 之类的目录都不能写入,这是 osx 在2015年下半年修改了安全策略,如果你看了 wwdc 2015的话可能会想起来,或者可以点这查看回顾,
如果你只是想快点解决问题的话,我就给你简单解释一下这个安全策略,这种策略叫做Rootless机制,简单来说,就是 root用户也无法操作某些系统关键部位。
此时就有两种解决方式:
1.新建一个运行目录
2.关闭 rootless
新建运行目录就不说了,
下面给出关闭 rootless 的操作方式:
//重启按住 Command+R,进入恢复模式,打开Terminal。
csrutil disable
修改好了之后还可以选择再次打开,打开的方式为:
//重启按住 Command+R,进入恢复模式,打开Terminal。
csrutil enable
以上代码在 osx10.12中测试通过,linux 待测试。