# Automator 手册第八章：用文件夹操作把手机打造成 Mac 的遥控器

> 本文公开全文。

原文：https://utgd.net/article/20227

遥控器，原本是一个简单、趁手的工具。但是用上了电脑和手机之后，遥控器这种基于红外线的古旧装置便慢慢淡出了我们的视线。

试试用 Automator 找回来。

## 原理

本文提到的几个动作作用各不相同，但通用原理一样，核心都是 Automator 的文件夹操作，同时把 iOS 上的 Shortcuts 作为“扳机”：

- iOS 端发送触发文件。

- macOS 端监控指定的文件夹。

- 一旦有新文件，就触发 macOS 上的预设动作。

就这么简洁，文件起到了扳机的关键作用。为了达到“遥控”效果，我将需要监控的文件夹放在 iCloud 中，这样通过 iOS 设备也可以创建触发文件。

当然，工具不是唯一的，你喜欢用 Dropbox 也没问题——Dropbox 用户还可以拿 Launch Center Pro 当遥控器。你也可以选择 Keyboard Maestro 或者 Hazel 来代替文件夹操作，但不要忘了 Automator 是免费的。

搞明白基本原理之后，我们就从简单到进阶来看几个例子。

## 入门玩法：一键休眠

如果你接触 macOS 自动化比较早，可能听说过用邮件让 Mac 一键休眠的用法。但邮件客户端需要一直后台运行才能触发各种动作，何况人家又不是专门干自动化的营生，所以这类邮件偏门玩法一直都没有火起来。

时过境迁，现在的 iCloud 无缝集成在 macOS 中，足以担当更自然的触发机制。第一个文件夹操作就从“一键休眠 Mac”开始。要达到远程控制的目的，需要分 iOS 端和 macOS 端两部分进行配置。

- iOS 端：相当于遥控器，发送触发文件。

- macOS 端：相当于接收器，接收到触发文件后就会执行动作。

### iOS 端设置

在 iOS 端创建文件，压根用不着打开 Files，我们可以直接在 Shortcuts App 里进行。用到的两个操作是

- 文本：用于设置触发文件的标题和内容

- 存储文件：把文件发送到需监控的文件夹中。

文本框中填入“当日日期”，这样可以把运行 Shortcuts 那一刻的时间设为文件名，即使文件夹里有上次遗留的文本文件，Shortcuts 也能创建一个新的文件、照常工作。

考虑到以后可能还要创建其他的文件夹操作，为避免相互影响，可以为每个远程控制的动作设置专用文件夹，比如上图中的存储目的路径就是 Shortcuts/一键休眠。

以上，用于触发的 Shortcuts 就做好了，基础版的遥控器只有这两步。现在换到接收器——macOS 部分的设置。

### macOS 端设置

我们先在 iCloud 创建需要监控的文件夹。由于文件夹操作只能监测“有，或没有新文件”，但是不能再进行进一步的判断，所以我们需要为每个遥控动作设置一个文件夹，防止互相乱触发。需要监控的文件夹都收纳在 Shortcuts 路径下，和 iOS 端的配置保持一致。

紧接着就是文件夹操作的设置。在 Automator 里创建一个监控“一键休眠”文件夹的动作。这里有个小技巧，你可以把 iCloud 里的文件夹直接拖进 Automator，比手动点选要快。

随后就来添加 Automator 模块。先得加上“查找访达项目”和“将访达项目移到废纸篓”俩模块，把 Shortcuts/一键休眠 文件夹下的文本文件清理一下。这事儿得在休眠前，不然 Mac 睡过去就没法清理了——从中可见，工作流的顺序直接决定了动作运行的效果。说回我们的主要目的：休眠。接上一个 Shell 模块，填入命令 pmset sleepnow 就搞定。

换回 iOS 设备，戳一下一键休眠的 Shortcuts 看看效果：

实验成功。

动作下载

知识点：如何使用别人提供的文件夹操作？

从网上下载的文件夹操作，解压并安装会提示你选取一个需要监控的文件夹。

安装后可以再找到目标文件夹，右键查看“Folder Action Setup…”，确认一下动作有没有安装成功，或者有没有重复和冲突。如图有两个版本的远程下载动作，只需勾选一个，两个都启用的话就要打架了。

## 进阶玩法：远程下载

最后，我们来看一个比较秀的玩法：远程下载。

场景很好想象：在茶水间和同事聊天，忽然发现自己漏追了整整两季《飞出个未来》，于是马上掏出手机、按下远程下载的按钮，家中的电脑立刻会意，开始下载视频；等你回家冲完澡、陷进沙发里，躺平了就能开始补番。

远程下载，难点在于如何远程控制电脑。一般来说无非软硬件两套方案，傻瓜一点的有各种视频会员、智能路由器，高阶玩家则可以选自搭 Aria2——等等，难道为了看个电影，还必须先掌握端口设置、内网穿透这些复杂的操作，甚至去租服务器、买路由器？

实际上，文件夹操作就是更简单实惠的方案：

- 不需要任何网络部署知识

- 不需要任何额外软硬件开销

下面介绍难易两种方法，当然难点那个学会后用起来更爽，诸位丰俭由人。

### 下载的原理

下载动作的高级之处就在于，我们不仅是靠文件来触发动作，还要把下载链接嵌入文本文件，直接远程传递给电脑。先不管后续怎么下载，两个下载动作的大致工作流程都是相同的：

- 手机发送带链接的触发文件到 iCloud

- 文件夹操作检测文件夹，有新文件就触发

- Automator 提取新文本文件中的链接

- Automator 删除文本文件

- Automator 执行下载动作

至于如何获得链接，不要问我，我相信你拿这些动作是为了下载手机上下不下来的大型软件、长篇文档。

### iOS 端设置

还是先从 iOS 端开始。这回用的也是 Shortcuts，但需要接收 URL 作为输入，操作步骤也稍有不同：

- 获取文件、删除文件：删除 Shortcuts/远程下载 文件夹及其中的文件，等于事先进行一遍清空工作，避免文件夹里产生多个文件，发生冲突。

- 文本：将 Shortcuts 输入（即想下载的链接）作为内容。

- 存储文件：将包含下载链接的触发文件放到待监控文件夹。

做好后的“遥控器”通用于下面难易两种方案。

### macOS 端版本一：使用现成模块

第一个方案完全使用 Automator 自带模块，也不需要太多自定义，只是把一串动作连起来就行。比较关键的，是如何获取 Shortcuts 传过来的链接？稍微理一下思路，会发现只需获取文本文件的内容就好了。另外，这回由于要用到文件中的链接，所以还不能贸然删除文件，要把链接暂存到变量里面。这么一捋，文件夹操作的流程就有了：

- 过滤访达项目：过滤出文件夹中的 txt 文件。其实 Shortcuts 已经清理过一遍文件夹，再用 Automator 过滤是上一道双保险。

- 设定变量的值：将过滤出来的文化设为“文件”变量，便于随后灵活取用。

- 打开访达项目：用脚文本编辑器打开“文件”。

- 暂停：停顿 2 秒，等文本编辑器完全打开。在配置好的电脑上也许可以不用花这几秒时间。

- 获得文本编辑文稿的内容：获取文本文件“文件”中的下载链接。

- 设定变量的值：将下载链接设为变量“链接”，留待稍后取用。

- 退出应用程序：退出脚本编辑器。

- 获得变量的值：获取“文件”。

- 将访达项目移到废纸篓：将“文件”删除。

- 获得变量的值：获取“链接”。

- 下载 URL：下载刚刚获取的链接。

为了在一场串的工作流中随时调用文件和链接，整个文件夹操作用了两次变量，但跟着上面的步骤看下来，总体比较易懂的。细心的读者可能会问，能不能先下载再删除文本文件，这样不是就能减少变量的使用了吗？如果这么做，一旦下面的模块执行识别，后续的清理清理模块也就不能执行，等你回家时就留下一个烂摊子等你收拾了。所以，下载这一步充满未知性的一步还是要留到最后再进行。

这个动作使用的是 HTTP 直接下载（和你用 Safari 浏览器下载是同一个道理），遇上大文件速度慢、容易崩，更适合下下小东西。

下一节会再介绍一个更靠谱的动作。

动作下载

### macOS 端版本二：使用脚本

这次我们使用 AppleScript 脚本来下载，以便调用 Aria2 这一下载利器。读到这里，如果原先就有条件配置 Aria2 远程下载的读者可以不用再照着本文折腾了。

你首先要装上 Aria2，命令可以用 brew install aria2（不认识 brew 命令？你可需要稍稍学一点 HomeBrew 的知识，以后用它来管理软件会非常惬意）。本文使用的是 Aria2 的命令行模式，可以跳过具体的配置文件。

我们沿用上一小节的动作，只把最后一步改成“运行 AppleScript”，替换原来的 HTTP 下载方式。其中的脚本如下：

```
on run {input, parameters}
    tell application "Terminal"
        activate
            do script "aria2c " & input
       end tell
end run
```

懂 AppleScript 的人，大可把 AppleScript 模块前的步骤删个精光，完全用脚本来实现下载和文件清理。但这样对于多数读者来说不怎么友好，何况这篇文章的重点也不在于介绍 AppleScript 语法，所以我们只在最必要的地方用一下脚本。

另外，高手们可能要纳闷了，Automator 不是自带 Shell 模块吗，何必麻烦 AppleScript 来调用 Shell？原因在于内置的 Shell 模块是在后台默默执行的，看不到进度、也控制不了它，一般人回家发现出错了，咋修都不知道。

所以，要用 AppleScript 打开终端，直接在里面运行 Aria2 的下载命令。

动作下载

---

[前往标准阅读页](https://utgd.net/article/20227?audience=web)
