在本系列前两篇文章中,我们已经找到了简便可行的方式,可以轻松设置文件打开方式,并且批量修改一组文件。不过,文件管理贵在、难在持之以恒,近藤麻里慧所谓的一劳永逸式整理术并不实际,以后只要有新文件进来,仍然要面临决策问题,这恐怕才是多数人难以坚持良好文件整理习惯的原因。
但是,如果我们能够搁置纯粹演绎出来的——如果不是刻意刁难而意淫出来的——障碍,把目光聚焦到真实、具体的场景,就会发现,问题根本没有想到那么严重。那些工具无用论者所忽视的,恰恰是已经具备一定规模的文件管理系统。详言之,无论习惯如何,人们总有某种文件整理规则,你可能已经建立起了文件夹分类系统,并且持续使用了一段时间,这套相对稳固的文件层级体系实为文件自动化的基石。
以我工作中经常使用的 Markdown 格式法律文件为例,当我打开这些文件式,百分之九十九的可能是要参阅它们,而不是要修改(极罕见的文字性错误除外)。在我的层级文件夹系统中,参考文件目录下的 Markdown 文件基本都可以默认用浏览工具 Marked 打开,直接进入预览模式。至于放在其他位置的 Markdown 文件,很可能是我自己写的杂文草稿,这些文件就不需要单独设置,照常用轻代码编辑器打开就好。
既然把思路引向了文件自动化,接下来的事情就有章可循,只需选择一款支持文件自动化的工具,就能监控几个常用文件夹里的新文件,并自动为其设置打开方式。在 macOS 环境下,比较理想的工具有 Hazel 和 Keyboard Maestro,前者功能细到令人咋舌,但是后者也能覆盖十之八九,我目前用的是后者。
文件自动化的基本逻辑,无非是 WHERE、WHAT 和 HOW,我早年在杂文中提出了这一模式,这些年来工具几经更迭,模式却历久弥新:
WHERE:要监控哪个文件夹,其中的文件变化将触发自动化动作。 WHAT:要过滤哪些文件,只有符合特定元数据的文件才会被过滤出来交给下一步操作。 HOW:要执行怎样的操作。
具体到 Keyboard Maestro 中,WHERE 就成了文件夹 Trigger,用以监控目标位置的文件变动;WHAT 则可以使用 IF 条件判断模块,考察文件的元数据或内容,检查是否符合启动自动化的条件;HOW 则是 Keyboard Maestro 中的具体操作。1
在我的法律资料文件夹中,有一个子文件夹专用于收纳法律法规类文件,除了极少数带表格的——主要是税务领域,不只是幸运还是不幸,我并不从事相关工作——多数文件可以无损转换为 Markdown,小到几百字的通知文件,大到洋洋洒洒十几万字的司法解释乃至上百万字的法典评注。这些位置的 Markdown 格式文件,基本都需要用 Marked 打开,而非编辑器。既然位置和文件类型都中正下怀,那么接下来就是将其自动化,免去手工设置。
触发方式即监控文件夹,而文件类 Trigger 继承了 Keyboard Maestro 的复数 Trigger 机制,这意味着你可以在一个动作中监控一系列文件夹。图中展示了编号为 1、2、3 和 4 的文件夹,这暗示着还有其他,确实,剩下的几个文件夹包括国家标准、行业标准和地方性文件,不过这几类文件,往往下载到的也是 PDF 或 OFD 格式,故暂不处理。
条件设置比较机械,只考虑新收录的文件是否系 Markdown。Keyboard Maestro 自带了变量(或谓 Token)%TriggerValue%
,表示触发当前动作之物,在文件自动化中就代表触发了自动化的文件,因此只需考察其是否以 .md
结尾,就大致知道了文件格式。这一方式固然机械,但本文语境终归是自己整理的层级文件夹,大概还不至于考虑是否有特洛伊密码病毒伪装为 Markdown 文件。
最后是打开方式设置。核心代码与前文一致,但 Keyboard Maestro 的数据输入方式又异于 Shortcuts、Automator 或 LaunchBar,你不能直接复制粘贴现有代码,而是要先在 Keyboard Maestro 中设置一个变量作为中转站(如下代码中是 localMinja
)2,再于 AppleScript 脚本中调用它。略显可惜,Keyboard Maestro 虽已有 %TriggerValue%
,但暂时(20240826)无法直接用于 AppleScript 脚本,故我的脚本多中转了一道,并不漂亮:
set kmInst to system attribute "KMINSTANCE"
tell application "Keyboard Maestro Engine"
set TriggerValue to getvariable "localMinja" instance kmInst
end tell
tell application "System Events" to set default application of alias TriggerValue to alias "/Applications/Marked 2.app"
诚然,这样的自制自动化流程,必然忽略目标文件夹之外的文件,同时也可能因为一次性添加过多文件而有错漏。手动操作仍不可彻底免除。但是,在这里,主导的是省力法则,而非百分百完美的自动化(如果有完美自动化的话)。
但至少,在整齐的层级文件体系中,类似批量设置文件打开方式这种堪称乖僻的要求才可能得以满足。
系列文章回顾:
🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引(增订版)》正在 UNTAG 售卖,详解 Keyboard Maestro Macro 高级设计思路,欢迎选购:付费内容链接
- 触发方式和操作对象均不限于文件本身。就前者而言,例有系统级文件自动化一例:预处理 PDF,我曾在该文中综合考察文件和浏览器的状态,统筹判断所下载的 PDF 文件是否需要自动处理。就后者而言,已有不少人将文件自动化工具当成遥控器,我也曾写过一篇用自动化工具搭建云端文件处理流程。 ↩
- 严格来说,不用手动设置,运行 Macro 时如觅之而不得,Keyboard Maestro 会自行创建。 ↩