如何批量修改“乱码”文件名

花火田丁 花火田丁 2020-04-13 10:48:22 +0000

题图来自于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 脚本、文件权限

第一步,打开 Automator,新建一个「快速操作」(Workflow)
图片来自应用截图,版权归原作者所有
第二步,正式来写 Workflow

首先,修改基本设置,这里我们是要对文件进行操作,所以两个选项中分别选择「文件或文件夹」,以及 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

Automator 自动操作,是个很强大的工具,强烈建议 Mac 的用户花点时间研究一下,可以把你从繁杂的琐碎中解放出来。Apple 官方的介绍如下1

图片来自网页截图,版权归原作者所有

关于 Windows 上的使用

其实也很简单,没有 Automator,装好 Python 后直接运行 Python 脚本就好了,脚本内容与 Workflow 中使用的类似。

  1. Mac 101:Automator  https://support.apple.com/zh-cn/HT2488↩︎



关于「HOW TO」系列

这个系列的初衷,我在 回归初心 中提到的,因为平时写的关于「WHY」或者心理活动方面的文章,「HOW TO」系列更偏向于实用。另外一点在于,我发现,有些本行业内认为小儿科或者不值得一提的工具或者方法,对于大多数行业外的人来说,还是比较陌生的,本着「抛砖引玉」的想法,想让大家可以通过这些「砖」打开思路,也可以了解到一些平常不太接触得到的一些东西。

旧文参考:

一句话生成卡通版照片

如何用 aria2 打造 Mac 上强大的下载工具

如何用 Swift 写一个手电筒 App

如何快速制作「一图看懂」

如何用 GitHub 搭建个人博客

如何用 RSSHub 打造个性阅读器

QuickTime Player 实用技巧

如何用 ImageMagick 处理图片

如何用 iMovie 做看上去很高级的视频

如何用 Python 写一个最简单的爬虫

如何用 ffmpeg 处理视频

如何用 ifttt 做一些自动化提醒



撒欢吧
谈理想
聊人生
讲故事
相对论
花火田丁
微信号:huahuoding
花火田丁
不折腾不人生