题图来自于NextDay
说起「乱码」,大多数人都碰到过,尤其在中文环境下。其中有一种比较常见的,比如「%E8%8A%B1%E7%81%AB%E7%94%B0%E4%B8%81」,很多时候,从网上下载的文件就是这种形式,手动去改文件名也是很麻烦,今天我们介就绍一种方法可以「半自动」处理这类“乱码”。
%E8 这种其实不是乱码,而是 URL 编解码造成的。关于「URL 编码」请戳原文链接查看阮一峰在2010年写的一篇文章,这里就不对原理做过多介绍了。
今天的主题和用到的环境如下:
主题:如何用 Automator 批量修改 URL 编码的文件名
测试文件:%E8%8A%B1%E7%81%AB%E7%94%B0%E4%B8%81.txt
硬件:MacBook(Windows 文后会简要提及一下如何使用)
软件:MacOS 自带的 Automator(自动操作),图标是一个机器人
涉及知识点:URL 编码、Shell 脚本、文件权限
首先,修改基本设置,这里我们是要对文件进行操作,所以两个选项中分别选择「文件或文件夹」,以及 Mac 的文件管理器 「访达.app」(Finder.app,总觉得翻译成中文有点奇怪,AirDrop 变成「隔空投送」之后,我曾适应了好久🤦♀️)
接下来,是最关键的一个步骤,我们需要写一个 Shell 脚本来执行具体的命名操作。Mac 天然带有 Python,所以可以很轻松地调用 Python 的 URL 编解码模块,让代码变得异常简单。
# 调用 Python 内置模块进行解码
alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
# 遍历选择的文件列表,进行重命名
for f in "$@"
do
newName=$(urldecode "$f")
mv "$f" "$newName"
done
准备好了脚本之后,我们在 Workflow 中添加 Shell 的运行组件,并把这段代码粘贴进去。
zsh 是 Mac上自带的一种 Shell,可以称为是「终极 Shell」。
选择「作为自变量」而不是「stdin」,后者是需要键盘输入,而前者可以理解成是程序的输入参数,我们这里直接从 Finder 操作文件,所以会将文件作为输入参数,故选择「作为自变量」。
最后,我们把这个Workflow 保存一下,取个名字叫「urlDecode.workflow」,文件会默认保存在用户资源库下的 Services 文件夹下。
/Users/xxxx/Library/Services/urlDecode.workflow
Workflow 就绪,是不是就可以执行了呢!理论上是的,我们先看看怎么执行。
进入到需要改名的文件夹里,选中一个或者多个需要改名的文件,右击。
不出意料地报了个错,但报错提示里已经验证了我们 Workflow 的功能是 OK 的,URL 编码的文件名已经被“翻译”成了我们熟悉的中文字符,但因为文件权限的问题,导致重命名无法完成,而非 Workflow 本身设置有问题。
Mac OS 针对安全性做了很多设计,最新版把应用程序安全权限又提升了一个级别,尤其是针对文件管理这块,需要单独授权。没关系,我们通过一句命令更改下文件权限就可以了。
sudo chmod -R 777 /Users/xxxxx/Downloads/test/
再次运行 UrlDecode 服务,成功地修改了所有文件的名称。
到这里,你一定是发现了,开头的那串“乱码”———%E8%8A%B1%E7%81%AB%E7%94%B0%E4%B8%81,经过解码之后,就是中文字「花火田丁」。
Automator 自动操作,是个很强大的工具,强烈建议 Mac 的用户花点时间研究一下,可以把你从繁杂的琐碎中解放出来。Apple 官方的介绍如下1
关于 Windows 上的使用
其实也很简单,没有 Automator,装好 Python 后直接运行 Python 脚本就好了,脚本内容与 Workflow 中使用的类似。
Mac 101:Automator https://support.apple.com/zh-cn/HT2488↩︎
关于「HOW TO」系列
这个系列的初衷,我在 回归初心 中提到的,因为平时写的关于「WHY」或者心理活动方面的文章,「HOW TO」系列更偏向于实用。另外一点在于,我发现,有些本行业内认为小儿科或者不值得一提的工具或者方法,对于大多数行业外的人来说,还是比较陌生的,本着「抛砖引玉」的想法,想让大家可以通过这些「砖」打开思路,也可以了解到一些平常不太接触得到的一些东西。
旧文参考:
发送给作者