按:本系列文章写于我本科的课余时间,当时 Automator 还是 macOS 上最重要的自动化工具之一。白驹过隙,如今原生自动化已让位于 Shortcuts,但 Automator 仍然远远比后来者稳定,且从 Automator 这款历史悠久的工具入手,或许更能理解 macOS 自动化——而不是站在 iOS 的外来者视角。
由于平时写的杂文实在过多,根本来不及发,本系列文章就一拖再拖,直到 Automator 本身都成了活化石。虑及选题古老,我将系列文章全部免费发布。
通过第一章,我们基本知道了 Automator 能用在哪些地方。接下来的两章里,我们将了解更多具体的 Automator 动作(Action),并且试着动手创建它们。
第二章的动作比较基础,多数使用了不需要大幅调整的 Automator 自带模块,先实现“能用”的效果;相对的,自定义空间也少一些。通过这一章,希望大家能够熟悉 Automator 的界面,并且理解动作的工作方式。
第三章主要引入一些进阶的模块,并且使用变量、循环等概念,将第二章的动作打磨得更加完善,不过暂不扩展到更难的脚本内容。两章下来,Automator 自带模块的功能基本就能讲完,常用的搭配组合也都能涉及。
现在,欢迎开始搭建你的第一个 Automator 动作。
从认识界面开始
鉴于目前官方翻译让人看得一头雾水(请在没有配图的情况下试着理解一下这句话:自动操作中的操作都是工作流程中的单个步进),我们接下来会用一些形象的比喻来理解 Automator 界面。沿用上一张“车间”的比喻,整个 Automator 界面就可以分成 5 个区域:
- 左侧,资源库:所有 Automator 步骤都分门别类呈现在这里。可以点击“资源库”按钮把它折叠起来。
- 右侧,工作流程区:步骤在这里串联成工作流程。可以点击任意步骤左侧的小箭头把它折起来,制作复杂动作时,这是一个简化界面的好办法。
- 左下方,步骤详情区:这部分就像摊开的工作手册,详细解释了当前步骤的输入输出与使用方式。支持中文。
- 右下方,日志监控台:运行动作后,可以显示动作是否运行成功、哪一步出了错。可以帮助我们排查问题。
- 右上方,控制按钮:包括开始、暂停等按钮,用于测试动作。刚开始用 Automator,你很可能做出无限死循环的神奇动作……别担心,可以通过控制按钮强行结束它。
我们创建一个 Automator 动作,实际上就是根据“工作手册”从零件区取出一系列步骤,在工作区组合起来,然后照着监视台的提示把动作调试到正常运行。
理解 Automator 的工作方式
之前我们把整个 Automator 动作视为一个车间,但是每个步骤具体怎样运行,还没有提及。是时候来看看神秘的 Automator 小车间里面都在做些什么了。
和 Automator 动作一样,每个步骤的基础工作方式其实也是“输入、处理、输出”。工作流程就像一条流水线,经过一通加工,返回给你处理好的成品。
流水线处理听上去有点呆板,其实很契合我们使用 Automator 的初衷:一键完成一长串操作。在 Mac 电脑上,诸如给文件标上日期、添加前缀、调整图片尺寸等常见操作,单个看上去都不难,但如果不断重复一套固定的流程,估计你很快就要犯恶心了。而且随着意志力逐渐被消磨,越到后面还越容易出错。这类事情,就适合交给 Automator,又快又准。
不过,这条流水线也可以做一些调整,来适应更加复杂的任务。具体来说,对待输入有下面 3 种方式:
- 接受上一步的输入:Automator 的默认输入方式。如果两个步骤之间有箭头相连,就说明下面的步骤接受了上一步的结果。
- 接受来自变量的输入:工作流程是线性的,但是借助变量(具体下一章再说明)可以把输出暂且放到一边,完成别的工序后再取用。比如批量重命名文件,就可以先把文件设为
文件
变量,在按顺序输入完自定义的文件名后,再结合文件
变量和输入的文本进行命名。 - 不接受任何输入:有些步骤不处理任何输入的东西,只是自顾自干自己的事情,比如发送通知、显示提醒,那就可以右键点击这些步骤,选择“忽略输入”。
配合着图片和文字解释,你有没有回想起 Automator 图标上那个小机器人?没错,它手里拿着的就是一根管子,代表连接各个步骤。
补充包 | Automator 动作在哪里:除了 Workflow 和 Application,其他 6 类 Automator 动作创建后都会直接存进系统资源库,源文件找起来并不方便。我整理了它们的存储路径,方便你找到源文件进行编辑或删除:
- 快速操作:
~/Library/Services
- 日历提醒:
~/Library/Workflows/Applications/Calendar
- 文件夹动作:
~/Library/Workflows/Applications/Folder Actions
- 图片捕捉插件:
~/Library/Workflows/Applications/Image Capture
- 听写命令:
~/Library/Speech/Speakable Items
- 打印插件:
~/Library/PDF Services
基本知识讲完了,开始通过一些简单的动作了解 Automator 模块。Automator 中的模块多达近百个,如果你装了第三方的自动化工具,资源库中的模块会轻松涨到几百个。但这些模块并不是每个都要深入掌握的,比如那种把歌曲导入 iTunes 的古董模块,本系列文章就不会涉及。
下面我们开始通过动作实例认识模块。Automator 的模块基本可以按照输入对象的类型来分类,这章将介绍:
- 通用文件动作:能够处理所有类型的文件,例如移动、拷贝、重命名或者过滤出符合要求的文件。
- 专属文件动作:专门处理某类格式的文件,例如转换格式、缩放图片、压缩 PDF。
- 文本动作:专用于文本处理,例如获取邮件地址、文本转音频。
- 网页动作:专用于和网页交互,例如过滤链接、下载图片。
注:部分动作只是几个自带模块的简单组合,如果你找了一圈发现本文不提供下载,还请见谅——下载的工夫,自己照着做一个动作都足够了。
文件动作
文件和文件夹相关的模块数量是最多的,除了单独使用,不少情况下这类模块会也用到文档、图片、网页等相关动作中,充当“胶水”或者“润滑剂”。
通用文件(以及任何专有格式)相关操作往往支持批处理,可以把一堆文件全拖到 Automator Application 上,或者选中文件后用快速操作来一次性处理它们。
这一章先来看最重要的几类文件操作,在分开介绍后,会有一些串联多个文件动作的实例。
按种类整理文件(文件夹操作)
涉及模块:
- 过滤访达项目
- 移动访达项目
- 拷贝访达项目
在所有文件相关的模块中,有一个地位比较独特:过滤“访达”项目。它起到过滤器作用,可以让 Automator 准确选中我们想处理的文件,并交给后续的模块。整理归档、清理垃圾……都离不开过滤访达项目,过滤可以说是很多动作的第一道大关。
想看清过滤的效果,最好就是拿一个乱得让人不想整理的文件夹来开刀。电脑哪里最乱?桌面可以拜托“堆栈”,那就挑另一个重灾区下载文件夹吧。
可以看到,原本乱七八糟的文件,很快就按种类分好并存进了对应的文件夹。每个归档动作只有两步,过滤之后,丢给**“移动访达项目”**来归档。
默认情况下,Automator 会比较“啰嗦”,一旦你添加的模块有可能改动文件,它就会提醒你加上**“拷贝访达项目”**的辅助模块,生成一个文件的副本任你捣鼓,出错了也不至于把原文件搞坏1。不过在归档文件的动作中,我们要处理的正是原文件,所以不应该用拷贝模块。
让我们回到过滤。条件设置是整个归档动作的核心,图中展示的是按照文件拓展名来过滤,此外 Automator 还支持名称、种类、大小、日期等条件。
可惜条件数量再多,只是单个使用的话,难免有匹配不上的情况,所以 Automator 还允许组合多个条件,形成更加精确的匹配条件。首先就是条件之间的关系,可以有 3 种:
- 全部:条件越多过滤越严格,层层筛选出最符合要求的文件。
- 任一:用于一次性处理好几类文件,比如 jpg、png 格式就可以组合在一起过滤。
- 没有:适合拿来排除特殊类型的文件,比如重要的配置文件、等等。
光有组合感觉还不够,比如同样是来到下载文件夹的图片,AirDrop 过来的手机截图可能我们直接就插到文章里,怎样把它们排除到需要归档的图片之外?只要按住 ⌥Option
键加上一条子条件:“以下没有条件被满足:名称开头是 IMG_
”,就能排除 AirDrop 过来的图片(手机自己产生的图片名一般都是 IMG_
打头)。
子条件也可以成组出现,并且层层嵌套,具体有多少层我也没试过,但肯定够你用。如果无论怎样搭配条件都不对劲,只能说明一开始就不应该用“过滤访达项目”这一模块。
小练习 1:除 Application 外,其他的 Automator 动作都保存在系统文件夹中,哪日重装系统就会统统消失。现在的问题是,如何把所有自定义 Automator 动作自动备份到 iCloud?
提示:使用拷贝模块。
文件自动解压(文件夹操作)
涉及模块:
- 过滤访达项目
- 打开访达项目
我们修整一下刚才过滤模块,继续用它实现文件自动解压。
首先还是根据文件拓展名 .zip
过滤出 Zip 压缩包,然后交给下一步“打开访达项目”,最简单的解压动作就实现了。
当然,系统解压工具支持的格式很有限,所以我们还要引入 Unarchiver、Keka 这两个第三方工具。之所以选它们,不仅因为它们格式支持更广,最重要的是这两个工具可以不开应用直接就直接实现解压。两个工具都没有提供 Automator 模块,那怎样把它们接入工作流?答案还是“打开访达项目”模块,只是需要把“打开方式”设置成第三方解压工具。
尽管调用了第三方工具,但是 The Unarchiver 和 Keka 的主应用都不会启动,也就犯不着解压完后手动把它们退出,做到了润物无声。
熟悉之后,可以用 Unarchiver 或者 Keka 接管绝大多数类型的压缩文件。
Aria2 等下载工具的用户需要多一步操作,由于下载到一半的文件也会以 .rar
等拓展名结尾。为了避免把没下完的文件也解压掉(只会引发一串系统错误),可以将 Aria2 的下面目录指定成 ~/Downloads/Aria2
,因为文件夹操作只负责当前文件夹,至于子文件夹中发生了什么,它不管。
文件重命名
涉及模块:给访达项目重新命名
Automator 几乎是你能找的最好的免费重命名工具,它在提供丰富配置选项的同时,保留了易懂的图形化界面。
当然,Finder 自己也有批量重命名功能,直接通过右键菜单就能启用,为什么要使用 Automator?可以列出的理由非常多:
- 一次进行多项重命名操作:Automator 可以把多个重命名模块串联起来使用,还可以接上其他模块,比如重命名后移动文件将其归档。
- 丰富的日期选项:可以自定义日期格式,标出
2018-07-10
这种更常见的日期格式;还可以自动标上文件修改、创建的时间,方便查看文件的版本。 - 细致的文件编号:可以设置数字编号的位数,方便 IINA 等播放器正确识别剧集(1 位数字的编号会被认错)。
- 支持改变文件名大小写:可以让文件名中的英文全小写、全大写或者仅首字母大写。
- 支持修改文件拓展名:手动改文件名时,如果动到拓展名就会被系统警告,Automator 则可以跳过提示框,使用过程更清爽。
- ……
我们试着串联“添加文本”和“更改大小写”两个重命名模块,展示一下 Automator 的批处理效果:
重命名模块具体的用途非常多,这里放一个大家都懂的“修复视频拓展名”的例子,当然目的不是为了鼓励下载某些不可名状的资源,而是希望能激起大家“随手做个 Automator 动作解决问题”的意识。
小练习 2:猜猜这个动作的流程是怎样的?
专用文件模块
前面介绍的文件模块,几乎任何格式的文件都能处理,是入门 Automator 的好选择——即便你还不是很清除自己想用 Automator 干什么,也能做出几个能用的东西。
接下来这部分的模块,每个都专门对付一类文件,有的你可能永远都用不上。但是我们有必要知道它们的存在,等哪天遇到问题了,脑子里可以砰地蹦出来对应的现成模块,而不是绞尽脑汁自己编写脚本、重复造轮子。
批量处理图像(快速操作,推荐 Finder Quick Action)
涉及模块:
- 更改图像类型
- 缩放图像
和接收通用文件一样,对于任意专门格式的文件,Automator 也支持批处理。这一小节的几个图像模块,单个功能都不复杂,但是结合批处理后会很好用。
一个很容易被忽视的模块是**“更改图像类型”**。用到格式转换的情况还不少,比如 macOS 原生的截图都是 PNG 格式,其透明背景发到微博或知乎后背景就会乱套,像下面这样变成黑色甚至绿色,所以需要先转换成 JPG 图片。
有些人可能习惯一张张打开图片来改格式,这样很慢;预览工具虽然可以批量导出,可惜相当吃内存,你不妨试验一下连改十几张图,看看电脑会不会卡(请先备份好资料,如果死机了我不负责)。
这时候就要动用 Automator 了。创建一个快速操作,添加“更改图像类型”模块,一个简单的动作就完成了。留意一个细节,工作流的输入会根据第一个模块自动调成“(自动)图像文件”,因此,多数情况下对不需要手动选择输入类型。
再来看另外一个图片模块:缩放图像。经常有一些尺寸太大的图片(尤其是手机拍的照片,动辄十几兆)2,超出了某些网站的上限,没法上传。借助缩放模块,就能做简单的压缩处理。
拿 macOS 的截屏(2560 像素宽度)来测试,压缩到 960 宽度后体积骤降到原先的 1/8 不到,效果非常明显。
但是 Automator 自带的不包无损压缩,所以大尺寸的图片缩放后画质损失是肉眼可见的,可以把分辨率稍稍调高一些,避免压缩过度。
压缩 PDF(快速操作,推荐 Finder Quick Action)
涉及模块:
- 压缩 PDF 文稿中的图像
- 移动访达项目
用 PDF 格式来保存网页是一种比较通用的做法。直接由网页打印而来的 PDF 文件体积一般较大,可以用 Automator 加一道压缩工序。
PDF 压缩模块针对的是 JPEG 图片,选择中等压缩质量的话,一般能够将文档大小压缩掉两三成。
如果你经常需要把网页打印成 PDF,不妨将上述工作流程保存为打印机插件,这样就可以在打印时顺带把图片压缩掉;更进一步,这个“打印并压缩 PDF 图片”的插件还能够绑上快捷键——有一个比较神奇的思路是把快捷键设成 ⌘Command - P
,使用效果就是连按两次 ⌘Command - P
即实现打印压缩一条龙处理。
小练习 3:还有一种压缩 PDF 的思路,就是通过文件夹操作自动压缩,涉及的模块都是上文提到过的,请自己尝试一下如何实现。
文本动作
有必要说一下,Automator 里的文本模块比较弱,不比 Shortcuts 里的文本框可以成为沟通数据的桥梁。除了下一章的“请求文本”模块可以作为万能输入口,更多时候,Automator 中的文本模块都是单打独斗。
提取想要的文本(快速操作,推荐右键菜单)
“从文本中提取数据”是一个很聪明的模块,可以从大段文本里提取出网址、电话号码、邮件地址等类型的数据。
有时候我们会看见文字和链接夹在一起的文章,如果你不希望战战兢兢地挪鼠标选取(还可能漏选最后几位),就可以做个快速操作:
上面这个提取电话号码的例子中,我只是粗略选一段文字,右键“提取数据”就把拷贝到了剪贴板。
" alt="Alt text">提取数据属于“以防万一”型的模块,一旦用上,就能解决大问题。早年间,我在勤工俭学时接到一个任务,要制作一份栏目合订本,就在上线前一刻,很不凑巧服务器开了小差,不能直接用图床工具上传图片,只能把图片拖到浏览器、再从 HTML 代码里面抠取图片地址。
我想,坏了,合订本八成要延迟上线……忽然想起,Automator 可以提取链接,何不一试?果然咔嚓咔嚓就把链接拔了出来,很快完成了图片排版,合订本最后也准时发布了。
把提取结果显示在通知里,这个操作有点超纲,我们下一章再说。数据提取模块相当于现成的一套过滤器,以后我们获取图片链接、下载地址还会再和它见面。**“拷贝至剪贴板”**这个模块以后会很常用,赶紧和它混个脸熟。
想要提取更多其他种类的文本,需要使用正则表达,只是现在为时尚早,太快反倒会让你陷入“怪圈”。拿着锤子的人看啥都是钉子,学了万能的正则后也会受影响,某次一群 Workflow 老玩家研究用正则表达式匹配邮件地址,讨论了半天,结果有人冒出来一句:不是自带这个模块吗?
要想避免成为看啥都是锤子的人,就要多了解一些东西。是否知道一个模块的存在,会直接影响我们创造动作时的想象力。
从文本制作音频(快速操作,推荐右键菜单)
涉及模块:文本至音频文件。
来看一个连接文本和文件的动作:将文本转换成音频文件。核心模块就是“文本至音频文件”。
Automator 调用的是系统人声,比较机械,但是发音准,所以这个动作在一些外语学习者的圈子里小有名气。如果你真的需要经常练听力,可以把音频的存储位置设成 iCloud 文件夹,方便在移动设备上听。
“文本至音频文件”模块自带了存储选项,可以指定保存的位置;但有些模块(比如缩放图像)则不行,只会在原文件边上生成一个副本,得再加一个移动访达项目的模块来改变默认存储位置。
网页模块
最后一个大类是和网页交互的模块。Automator 的网络模块重在获取资源,相对的,和网页的交互能力则较弱,多数动作都是用于下载。
批量下载网页图片
批量下图这个需求,估计不少人折腾过,还在喊“右键已按烂”的人估计都成古董了吧。这里给个 Automator 版的批量下载动作,只要是当前网页上的图片,都能扒下来。
本动作的 4 步骤都是网页模块中的扛把子。前 3 个模块组成了一道过滤系统,分别滤出整个网页、图片链接和 JPEG/JPG/PNG 格式的图片链接,能够保证不漏图,也不至于把网页图标等无关元素下载下来(如果你还是下载到了用户头像图片,看下一节)。
其中“过滤 URL”这一步配置项相当丰富,如果你不是跳着读这篇文章的话,此时是不是想起了文件模块的过滤设置?没错,过滤 URL 时也可以配置得很详细,而且你可以继续添加一条“整个 URL 结尾是 GIF”的条件,把这个动作变得更完善。
下载当日热门壁纸
最后一个动作本身和效率无关,不过值得拿来和上个动作对比。以获取 Simple Desktop 的壁纸并设为桌面背景为例,整个工作流程是:
- 获取 Simple Desktop 首页内容
- 过滤出图片地址
- 加上后缀,用于下载大尺寸图片(先不管这一步,需要脚本)
- 下载图片
- 设为背景
相信你已经看到和上一个动作的差别了:这回获取链接所用的模块是**“从文章中获取 URL”**。前一个下载图片的动作,为求扒得干净,会从整个网页里扒取;这次只需要从正文里获取图片地址,直奔文章找就行。现在我们明白,如果不想下载用户头像、题图等图片,就用“从文章中获取 URL”。
成为合格的检修员
刚开始创建动作,出错是很正常的,甚至别人电脑上用得好好的动作,照搬到你那儿就可能运行失败。这时候先别怀疑自己的运气,我们踏踏实实地用 Automator 来检修问题。
先找到出问题的动作原文件,拖到 Automator 图标上打开,可以看到动作内部的所有细节;老玩家此时能够像主治医师一样凭经验“下刀”,但是新手还是先按下面的步骤进行排查,慢慢摸索。
在讲完检修过程后,我们会再看几类常见错误,方便你快速对症下药。
检修 Automator 动作
如果要检修、调试一个 Automator 动作,我们会用到下面几个方法:
- 日志监视器:界面右下方的区域,显示动作运行的详细日志信息。
- 每个步骤的结果:详细查看每一步的输出是什么。
- “步进”按钮:一步一步执行步骤,一次一次显示结果。
- 停用步骤:很难判断是不是某个步骤出错的时候,可以把它停用试试。
第一步一定是看日志。一个双击运行下来没有任何错误提示的动作,内部隐含的错误也会记录在日志里。新手经常会发现,自己做完的文件动作“咚”一声运行完毕,结果什么都没发生,也没瞧见弹出提示——其实此时你在别处的文件可能已经被删了,只是 Automator 还以为任务已经搞定。只有打开日志,才能进行深度检修。
(如果你没看到右下方的日志界面,点一下图中的按钮就能显示详情。)
** 查看日志可以帮助我们大致定位错误步骤。**下面是一个“找不到文件”的常见错误,日志详细告诉了我们第一步就出了问题,甚至具体哪一个文件找不到也会有提示。刚上手时多留意日志,可以避免很多新手病。
一般来说,日志帮我们查出来的是文件找不到、命令不存在等“大错误”,但有时动作运行顺畅,只是最后输出的东西不是我们预期的,这时靠日志就不够了。我们可以检查每一步的结果,找出到底哪一步开始输出产生了偏差。
除了发送通知这种啥都不输出的步骤,多数步骤都应该有输出,所以看到上图左边这种“没有结果”的步骤就可以往上排查了。为什么不是往下?上游不干净下游才会被污染,当然要追本溯源找问题。玩 Shortcuts 的人肯定记得“快速查看”这个步骤,编辑、调试动作时它常常被用来检查上一步的运行结果。“结果”的功能和快速查看类似,而且每个步骤都自带,很方便。
上面两个是查看错误的方法,下面的方法侧重调试,需要你多尝试。先来看步进。直接运行的话,所有步骤会一次性跑完,可能我们还没反应过来,系统就弹出一系列错误提示了。想要实时观察每一步运行的效果,就要用步进按钮代替正常的运行。步进一次只执行一个动作,干完就暂停,需要你再点击一次才会继续下一步。
步进到哪一步忽然不对劲了,这时候不用着急删除那一步骤,更好的做法是停用它,万一调试不成还还原到开始的工作流程。
步骤被停用后就等于被跳过了,上一步的输入会隔着被停用的步骤直接传给接下来的步骤。等检修完毕、动作可以正常运行时,就可以放心删除被停用的步骤。
常见问题和解决方案
随着检修次数的增加,相信你已经越发接近一个排雷老手了。但我们没必要把所有坑都踩一遍,下面是使用 Automator 动作时的常见问题,看到下面几类系统提示时可以优先采取对应的解决方案,比从头检查一遍效率更高。
没有权限
这个问题很好解决,都不需要打开 Automator。一般点击“OK”允许运行即可,如果还是没用,就找到“系统设置 - 安全性与隐私 - 自动化”,把你的 Automator 动作拖进去。
升级到 macOS Mojave 的用户,基本每次运行新动作都会遇到类似的权限请求。新系统对应用的权限管得比较严,只要动作涉及系统操作(如模拟键盘、鼠标点击等),都会受到限制。
找不到文件
Automator 的步骤已经包装得足够简单,要是找不到文件,一般这锅要甩给动作的制作者……下面两类情况都会导致找不到文件:
- 不涉及脚本时:往往是用了“获得指定的访达”项目步骤,但是别人电脑上的文件在你这儿不一定存在。推荐的做法是删掉这个步骤,换成“请求访达项目”。
- 涉及脚本时:制作动作的人填写了绝对路径,但是你的电脑名字和他不一样。解决方法是找到
/Users/路径
之类的字样,改成相对路径~/路径
。
这类错误也提示我们,制作动作时要选择更加通用的步骤,方便别人也方便自己。想象你哪天换了电脑,结果所有动作都挂掉了,一整天的工作都因此磕磕绊绊,那该是多么糟糕的事情。
打不开 Automator Application
最后这个“问题”其实和 Automator 无关,只是系统对于外来应用的防御机制。Automator Application 是货真价实打包好的应用,但网上淘到的动作几乎都没有开发者认证,所以直接是打不开的(我自己就不能直接打开从本系列文章中下载的 Automator Application……)。
比较好的做法是检查后再打开。先用 Automator 开启 Application,确认里面没有莫名奇妙的步骤(尤其涉及脚本时),降低电脑被入侵的危险。接着按住 ⌃Control
打开 Application,或者直接右键打开,以后就能正常使用。
练习答案
练习 1 答案:最合适的备份动作类型当属文件夹操作,当然日历提醒也行,但是文件夹操作可以监控系统动作文件夹,每次改动完动作就自动备份。用到的模块是“获取访达项目”和“拷贝访达项目”。这个动作其实只是简单模块的叠加,但能够解决烦人的 Automator 备份问题。
练习 2 答案:利用替换拓展名选项。
练习 3 答案:先过滤,再拷贝,最后压缩。这个练习的意义在于突出文件模块的“胶水”作用。除了自动压缩 PDF 文件,以后遇到图片压缩、相片 exif 信息移除等操作,也应该马上想到是不是可以自动监测后执行。