你有没有遇到过这种破事:在 Finder 里整理资料,半路想补一个 TODO.md,或者想在某个项目目录里塞一个空的 index.js 占位,结果必须老老实实打开编辑器,再在“存储为”对话框里一层层点路径。更别说有些人刚从 Windows 过来,还习惯右键直接“新建文本文档”,macOS 桌面端偏偏没给这个入口。
我用 Automator 折腾了一套方案:在 Finder 的当前目录下,一条快捷键或一次右键,就能直接创建文件。不需要安装第三方右键菜单工具,不需要先去某个 App 里新建再保存,轻量、免费、可随意改成自己想要的样子。
文章面向两类人:一类是刚接触 Mac、想找回“右键新建文件”体验的普通用户;另一类是每天在 Finder 里整理素材、写文档、摆项目结构的开发者。我会把 Automator 里最容易踩的坑也一并写出来,尤其是“到底怎么定位 Finder 当前目录”这个问题,很多教程都含糊带过,实际操作时最容易翻车。
1. 先用 30 秒判断:你要的是右键菜单、工具栏按钮还是文件夹监视
Automator 打开之后会让我们选工作流类型,很多人看到“快速操作”“应用程序”“文件夹操作”三个选项就懵了。这三个都能执行 Shell 脚本,但触发逻辑完全不同。
- 快速操作:绑定到 Finder 的右键菜单,或者菜单栏的“服务/快速操作”里。它的特点是必须选中一个文件或文件夹之后才能触发。好处是能和 Finder 原生交互深度结合,缺点也明显:你在某个目录的空白处点右键,看不到它。
- 应用程序:生成一个独立
xx.app,你可以把它拖到 Finder 窗口顶部工具栏上,双击也可以运行,还能像“文件拖把”一样把文件或文件夹拖到它的图标上。这个方案最接近“在窗口空白处新建”,是我现在的主力用法。 - 文件夹操作:可以指定某个目录,只要这个目录内容发生变化就自动执行脚本。它适合“监视固定上传目录”“自动整理下载文件夹”这种场景,和标题里“当前目录”的通用诉求并不匹配,因为你需要预先给每个目录都绑定一次。
三类工作流的差异,我用一张表简单总结:
| 类型 | 触发方式 | 能获取的“当前目录” | 适合本需求吗 |
|---|---|---|---|
| 快速操作 | 右键选中文件/文件夹后触发 | 选中项所在目录 | 适合,绑定快捷键后很顺手 |
| 应用程序 | 双击、拖拽到 Finder 工具栏、拖文件到图标 | 需要通过 Finder 获取,或者读传入路径 | 最适合,可以做到“在空白处新建” |
| 文件夹操作 | 目录内容变化时自动触发 | 固定绑定的目标目录 | 不适合作为通用方案 |
我的最终配置里其实同时用了两种:一个快速操作拿来绑快捷键,一个应用程序放到 Finder 工具栏上。因为只做一个时,遇到“当前目录里没有选中任何文件”的情况总会有那么一点别扭。读完下文你也会发现,核心逻辑其实一模一样,复制就能用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 拿到真正的“当前目录”:为什么不能信 pwd,而要用 insertion location
很多人第一次写 Automator 脚本,第一反应是在“运行 Shell 脚本”里放一句:
bash复制pwd
结果运行完发现输出不是 Finder 当前窗口的路径,有时甚至是 /。这不是你写错了,而是 Automator 运行 Shell 脚本时,工作目录根本不继承 Finder 的上下文。Shell 进程的工作目录和“你眼睛看到的 Finder 当前目录”完全可能是两回事。
正确做法是让 AppleScript 去问 Finder:你现在显示的是哪个文件夹?Finder 有一个叫 insertion location 的概念,翻译过来是“插入位置”,大概意思就是:如果我现在往当前窗口里粘贴一个文件,它会落到哪个目录。
单命令就能获取:
bash复制osascript -e 'tell application "Finder" to get POSIX path of (insertion location as alias)'
比如你在 Finder 里打开 ~/Documents/工作项目,执行这条命令会得到类似 /Users/你的用户名/Documents/工作项目/ 的结果,末尾带一个斜杠。
这个 insertion location 比“选中文件再取目录”更可靠。为什么?因为如果你只是把光标停在目录里、并没有选中任何文件,它也会正确返回当前窗口的目录。你不用额外判断“到底有没有选中项”。
但有一类情况不能只用它,那就是“拖文件到 App 图标”。当你把一个文件夹拖到应用程序图标上时,操作系统的
