mac/linux批量转换文件编码

来源:互联网 发布:k近邻算法代码 matlab 编辑:程序博客网 时间:2024/06/05 20:49

坑*的 Android 老师,期末考试让我们在他给出的项目上继续写代码。。。然而,给出的项目中,java 代码部分用的是GB2312,其他地方用的都是 UTF-8,简直坑*。

由于 Mac/Linux 自带一个 iconv ,可以转换文件编码,所以可以借用这个命令来进行文件编码的批量转换。


进入主题,,直接贴代码

#!/bin/bashfind *.$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/bashfind *.$1 -exec sh -c "iconv -f $2 -t $3 {} > {}.temp" \;find *.$1 -exec rm {} \;for files in *.tempdo     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 待测试。

0 0
原创粉丝点击