article_image

远程下载这一话题,不少人都有涉及,这篇文章成文较早,恐怕已经落后于时代,聊作一拓宽思路的参考方案。

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

试试用 Automator 找回来。

原理

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

  1. iOS 端发送触发文件。
  2. macOS 端监控指定的文件夹。
  3. 一旦有新文件,就触发 macOS 上的预设动作。
Alt text
Artboard

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

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

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

入门玩法:一键休眠

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

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

  1. iOS 端:相当于遥控器,发送触发文件。
  2. macOS 端:相当于接收器,接收到触发文件后就会执行动作。
Alt text
休眠原理图

iOS 端设置

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

  1. 文本:用于设置触发文件的标题和内容1
  2. 存储文件:把文件发送到需监控的文件夹中。
Alt text
一键休眠 Shortcuts 流程

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

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

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

macOS 端设置

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

Alt text
为每个动作创建一个文件夹

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

Alt text
直接把目标文件夹拖到 Automator 里

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

Alt text
一键休眠工作流

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

Alt text
一键休眠

实验成功。

动作下载

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

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

Alt text
选取需要监控的文件夹

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

Alt text
查看文件夹操作设置
注:以往讲自动化操作时,我都会在文章开头给出动作下载,以便大家装好后边玩边看文章。但是这篇涉及的具体配置较多,并非下载完动作就能马上用,贸然安上容易遇到各种小问题。所以这回直到把入门动作讲完了,我才提供动作下载,还请各位读者担待。

进阶玩法:远程下载

最后,我们来看一个比较秀的玩法:远程下载

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

Alt text
让电脑提前下载好视频,回家就能看,体验很爽

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

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

  • 不需要任何网络部署知识
  • 不需要任何额外软硬件开销

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

下载的原理

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

  1. 手机发送带链接的触发文件到 iCloud
  2. 文件夹操作检测文件夹,有新文件就触发
  3. Automator 提取新文本文件中的链接
  4. Automator 删除文本文件
  5. Automator 执行下载动作
Alt text
下载原理图

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

Alt text
Procreate 的参考文档太大,手机上下不下来

iOS 端设置

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

  1. 获取文件删除文件:删除 Shortcuts/远程下载 文件夹及其中的文件,等于事先进行一遍清空工作,避免文件夹里产生多个文件,发生冲突。
  2. 文本:将 Shortcuts 输入(即想下载的链接)作为内容。
  3. 存储文件:将包含下载链接的触发文件放到待监控文件夹。
Alt text
远程下载 Shortcuts 工作流

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

macOS 端版本一:使用现成模块

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

  1. 过滤访达项目:过滤出文件夹中的 txt 文件。其实 Shortcuts 已经清理过一遍文件夹,再用 Automator 过滤是上一道双保险。
  2. 设定变量的值:将过滤出来的文化设为“文件”变量,便于随后灵活取用。
  3. 打开访达项目:用脚文本编辑器3打开“文件”。
  4. 暂停:停顿 2 秒,等文本编辑器完全打开。在配置好的电脑上也许可以不用花这几秒时间。
  5. 获得文本编辑文稿的内容:获取文本文件“文件”中的下载链接。
  6. 设定变量的值:将下载链接设为变量“链接”,留待稍后取用。
  7. 退出应用程序:退出脚本编辑器。
  8. 获得变量的值:获取“文件”。
  9. 将访达项目移到废纸篓:将“文件”删除。
  10. 获得变量的值:获取“链接”。
  11. 下载 URL:下载刚刚获取的链接。
Alt text
远程下载 Automator 工作流

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

Alt text
下载失败会导致后续步骤也被取消

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

Alt text
由 iCloud 文件触发下载

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

动作下载

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
Alt text
命令行版的远程下载流程

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

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

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

动作下载


  1. 这个例子里,内容无关紧要。
  2. 至于为何在 Shortcuts 路径下,只是因为 Shortcuts 只能直接控制自己路径下的文件,存到其他地方还得手动点选,麻烦。
  3. 打开 txt 格式文件的默认选项。
  4. 比如说,一百多兆的超大扫描件 PDF。

author_avatar

Lawyer, macOS/iOS Automation Amateur