mac/linux批量转换文件编码

坑*的 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 待测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值