
用过 Mac 的人多少都遇到过这种尴尬在访达里翻到某个目录急着想新建一个文件记点东西结果要么打开“文本编辑”先存草稿之后还得移动文件要么打开终端cd 目录、touch 文件名路径一长就得复制粘贴半天碰到带空格的中文目录更是容易出错。实际上这个痛点完全可以用 macOS 自带的 Automator 解决而且一套流程配好之后在任意访达窗口里右键一下当前目录的文件就建好了甚至还能绑定快捷键实现全键盘操作。这篇文章我就把这套“在当前目录快速创建文件”的思路、完整实现、扩展用法和常见坑位一次讲透看完你也能直接照着自己的习惯搭一套。Automator 这个东西在 macOS 里一直存在但说实话日常存在感很低很多人根本没点开过。它本质上是一个可视化的工作流工具把系统里的各种操作文件、文本、脚本、App 动作像积木一样拼在一起生成一个独立应用、快速操作、文件夹操作或者打印插件。我们这里要解决的痛点就是“在访达当前目录下创建文件”这个需求用 Automator 的“快速操作”类型最合适既能塞进访达的右键菜单又能自定义快捷键灵活性最高。1. 需求拆解与方案选型1.1 这个需求到底卡在哪先说清楚这个问题的本质。在 Windows 上右键“新建”几乎是刻进肌肉记忆的操作但 macOS 的访达右键菜单默认没有这个选项。你可以在访达菜单栏的“文件”里新建文件夹但“新建文件”这个动作确实是缺失的。很多人退而求其次用文本编辑但这样会多出两步“保存并选择位置”的操作而且默认保存格式还是 .rtf不是纯文本也有人选择去 App Store 装第三方工具但为了一个右键新建文件的功能装一堆插件多少有点杀鸡用牛刀。更深一层的问题是我们想要的不只是一个“空白文件”最好是能直接在当前目录拿到一个可以命名的文件然后立刻用默认编辑器打开。这在写代码的时候特别实用比如你正在折腾一个脚本项目需要在当前目录快速补一个 config.json、README.md 或者 .gitignore用 Automator 一条工作流就能搞定完全不用切窗口。1.2 常见实现路径对比在 Mac 上实现“当前目录创建文件”大约有四条路线我全部试过直接说结论。一是用 Automator 做“快速操作”这也是我推荐的一号方案。它的优势是原生、免费、能做右键菜单和快捷键缺点是需要花十分钟配置一次而且对没用过 Automator 的人有一点点学习成本。二是用终端命令比如建一个 shell alias 或者函数配合 iTerm 的触发词。这个方案对鼠标操作不友好你得先把目录切换到终端里即使挂上pwd也无缝不了而且普通用户记不住命令。三是用 AppleScript 写一个脚本再用第三方工具比如 FastScripts、Alfred 的 workflow挂到快捷键上。这个自由度最高但前提是你已经有 Alfred 这类工具或者愿意为快捷键效率去折腾 FastScripts对纯小白不友好。四是装第三方右键菜单工具比如 New File Menu、iFolder 等。简单省事但大部分需要付费而且为了几个菜单项常驻一个状态栏 App内存和整洁度都不划算。所以我的最终选择是用 Automator 创建“快速操作”接收“文件夹”或“文件”对象在 Shell 脚本里拿到当前目录后直接touch一个新文件。这套方案零依赖、纯原生、可维护而且脚本逻辑完全可控想怎么扩展怎么扩展。2. 核心实现创建你的第一个快速操作2.1 创建快速操作的完整步骤老规矩先从实际操作开始。打开 macOS 自带的“自动操作”Automator可以按Command 空格搜“自动操作”或者“Automator”启动。第一次打开会有一个选择文稿类型的弹窗这里直接选“快速操作”。请注意旧版系统里这个地方叫“服务”新版叫“快速操作”本质上是一个东西只是换了个更直白的名字。进入编辑界面后界面分左右两栏。左侧是操作库右侧是工作流编辑区。我们需要做三件事在顶部配置“工作流程收到当前”为“文件夹或文件”位于“访达”。从左侧搜索“Shell 脚本”拖一个“运行 Shell 脚本”操作到右侧。在“运行 Shell 脚本”里设置“Shell”为/bin/zsh“传递输入”为“作为参数”然后填脚本内容。配置完只后按Command S保存名字取一个自己能认出来的比如“在当前目录新建文件”。到这里一个最基础的快速操作就建好了。你去访达里随便打开一个文件夹右键任意文件或空白处具体看下一节配置在“快速操作”子菜单里就能看到它。2.2 Shell 脚本的核心逻辑与参数解读这一步是整个工作流的灵魂。快速操作把你在访达中选中的对象作为输入传给 Shell 脚本脚本里常见的写法是for f in $; do dir$(dirname $f) touch $dir/未命名文件.txt done逐行拆一下。$是 Shell 脚本里所有参数的集合Automator 会把你在访达里选中的每一个文件夹或文件的路径作为参数传进来。for f in $就是遍历这些路径。dirname命令是拿取某个路径所在的目录部分比如你选中的是/Users/name/Desktop/test.txt那么dirname $f的结果就是/Users/name/Desktop。最后touch $dir/未命名文件.txt在目标目录创建一个空文件。这里有几个非常重要的细节都是我在使用中踩过坑总结出来的。第一为什么要在“传递输入”里选“作为参数”而不是“到 stdin”因为如果选“到 stdin”脚本里接收路径的方式就变成了while read f; do ...这种逐行读取模式处理带换行符的路径时容易出错。而“作为参数”模式下Automator 会把每个路径都作为一个独立的参数传给脚本路径里有空格、引号、中文都安全。第二为什么不直接touch 未命名文件.txt因为快速操作执行时Shell 脚本的工作目录即当前目录不一定是你在访达里看到的那个目录。它可能是/也可能是其他系统目录。所以必须用dirname $f拿到绝对路径再拼上文件名。这也是很多新手配置完后发现“文件建到了莫名其妙的位置”的根本原因。第三如果你只想在“当前目录”创建一次文件而不是选中多少个对象就建多少个那就别用for循环只取第一个参数first$1 dir$(dirname $first) touch $dir/未命名文件.txt这样无论你在访达里选中了几个文件都只创建一个新文件。2.3 安装与右键菜单配置脚本写好、保存之后怎么让它出现在我们想要的位置这里有一个 Automator 快速操作特有的机制保存好的快速操作会自动安装到~/Library/Services/目录下macOS 会在合适的上下文里自动识别它。但是这个“合适的上下文”不是自动完美匹配的它取决于你在 Automator 编辑器顶部设定的“工作流程收到当前”。我们设置为“文件夹或文件”那么它的生效范围就是访达里的文件夹和文件对象。但这里有一个容易搞混的点如果你在访达的“空白处”右键macOS 并不总是把“当前文件夹”作为一个对象传给快速操作。空白处右键时菜单里可能根本不出现你的快速操作或者出现后因为拿不到参数而报错。这是 Automator 设计上的一个限制访达本身并没有为“空白处右键”提供“当前目录”这个参数。我的解法是在文件夹里的任意一个文件上右键或者先 CommandA 全选再右键也行你的快速操作就会收到至少一个“文件夹/文件”参数脚本再用dirname拿到目标目录。如果你是强迫症希望在任何空白处都能直接建文件那需要走 AppleScript 获取“访达当前窗口的 target”这个放到后面讲。保存好之后打开“系统设置”System Settings“隐私与安全性”“辅助功能”确保你的终端或 Automator 相关进程被允许。这一步经常被忽略但很多用户反映“快速操作点了没反应”就是因为没有给权限。3. 实操进阶快捷键绑定与多场景扩展3.1 绑定全局快捷键的两种方式快速操作建好之后用鼠标点右键菜单还不是最快的操作方式。在自动化工具链里键盘永远比鼠标快一步。绑定快捷键有两条路径。路径一在“系统设置”“键盘”“键盘快捷键”“服务”里找到“文件和文件夹”分类你保存的快速操作会出现在这里名字就是你在 Automator 里保存的名字。点一下名字右侧的“无”直接按下你想绑定的组合键比如Control Shift Command N快捷键立刻生效。注意这里不要和系统已有快捷键冲突比如Command Shift N在访达里是“新建文件夹”你最好避开它。路径二如果你不想占用系统服务快捷键列表也可以在 Automator 工作流里自建“获得指定的访达项目”或“获得当前文件夹”作为输入然后绑定到第三方启动器如 Alfred 或 Raycast。但这属于另一个玩法了这里不展开。实际用下来我会把Control Shift Command N作为“在当前目录新建文件”的快捷键避免和访达默认的“新建文件夹”搞混。此外还可以设置第二个快速操作绑定Control Shift Command M用来“新建 Markdown 文件”。两个快捷键互不干扰效率极高。3.2 常用扩展模板文件、日期命名、批量创建一个固定的“未命名文件.txt”显然不够用真正顺手的工作流要支持模板和灵活命名。这里分享一下我实际在用的几个变体。变体一新建 Markdown 文件。现在写文档、做笔记、写博客越来越离不开 Markdown所以在当前目录快速建一个.md文件非常实用。脚本只需把touch的文件名后缀改成未命名.md甚至可以顺便写入一个头部模板first$1 dir$(dirname $first) file$dir/未命名-$(date %Y%m%d-%H%M%S).md echo # 标题 $file echo $file echo 创建时间$(date %Y-%m-%d %H:%M:%S) $file open -a Typora $file 2/dev/null || open -a TextEdit $file这里加了几个小动作用date %Y%m%d-%H%M%S生成时间戳命名避免文件重名用echo往文件里写初始模板最后用open -a尝试用指定编辑器打开这个新文件。如果你装了 Typora、VS Code 这类编辑器把 App 名字换一下即可。这个“创建并打开”的体验非常接近 Windows 上右键新建后直接进入编辑的流畅度。变体二批量创建目录结构。写代码时经常会遇到“一个项目目录下要同时创建assets、src、docs和README.md”的场景。可以用一个快速操作接收文件夹运行脚本for f in $; do if [ -d $f ]; then target$f else target$(dirname $f) fi mkdir -p $target/assets $target/src $target/docs touch $target/README.md done注意这里用-d $f判断传入参数是不是目录如果是文件夹就直接用它作为目标目录如果是文件就取它所在的目录。这个判断在使用快速操作时很关键因为你可能选中文件夹也可能选中文件夹里的文件。变体三带序号的文件。比如你正在整理一批素材想连续创建素材-1.txt、素材-2.txt…… 可以先写一个循环for f in $; do dir$(dirname $f) i1 while [ -e $dir/素材-$i.txt ]; do i$((i1)) done touch $dir/素材-$i.txt done核心逻辑是用while [ -e ... ]判断文件是否已存在如果存在就序号加一直到找到一个不存在的序号。这个“自动找空位”的逻辑非常适合频繁创建同类文件的人。3.3 使用文件夹操作实现自动监视除了“快速操作”Automator 还有另一种文稿类型叫“文件夹操作”Folder Action。它和快速操作的区别是快速操作由你自己在某处手动触发文件夹操作则是在某个特定文件夹里有内容变化时自动触发。比方说你有一个Downloads下载文件夹希望每有新文件下载完成时自动在当天日期子文件夹里复制一份清单记录这个需求就能用文件夹操作实现。创建方式是在 Automator 新建文稿时选“文件夹操作”然后右键左侧文件列表在选项里选择你要监视的文件夹再拖入“运行 Shell 脚本”。脚本内容里同样可以使用类似逻辑但注意此时$传入的是“本次变化的文件/文件夹路径”已经天然带了绝对路径。这个场景放在本文里可能有点跳但我想强调一点Automator 的核心是“事件 动作”的拼装逻辑。你理解了$、dirname、touch这几个元素的组合就不只是会复制我的脚本而是能自己组合出适合不同场景的新工作流。4. 常见问题与排查技巧实录4.1 快速操作不显示、菜单灰置这是我被问得最多的一个问题按步骤配置完了去访达右键却看不到“快速操作”菜单项或者看到了但菜单是灰色的点不了。排查思路按顺序来。第一确认你的快速操作类型是“快速操作”而不是“应用程序”或“文件夹操作”。这个在 Automator 首页新建文稿时选错后面怎么配置都白搭。第二确认“工作流程收到当前”设置是否为“文件夹或文件”并且“位于”是否为“访达”。如果你不小心把接收对象设成了“文本”那在访达里右键当然不会出现。第三确认文件是否真的保存到了~/Library/Services/下。可以在终端执行ls ~/Library/Services/看有没有对应的.workflow文件。没有的话建议重新保存一次。如果菜单出现了但点不了基本是权限问题。去“系统设置”“隐私与安全性”“辅助功能”里把/System/Library/CoreServices/下的Automator相关进程打上勾。如果这里找不到也可以直接把你用的终端 App比如 iTerm 或 Terminal加进去因为快速操作本质上是通过系统调用执行脚本的。4.2 文件建到了奇怪的位置脚本执行了但新建的文件跑到了根目录“/”或者用户主目录“~”这基本上就是没有用dirname $f取路径而是直接touch 文件名。原因之前说过Shell 脚本的工作目录并不继承访达窗口。解决方法是坚持用$参数形式并且永远在脚本开头写明dir$(dirname $f)或类似逻辑。另外还有一种“奇怪位置”的情况是你在访达空白处右键触发了快速操作但传进来的参数不是你想要的“当前目录”。这是因为空白处右键时 macOS 可能没有选中任何对象Automator 实际上没有输入参数导致脚本里$1为空dirname 执行出错脚本默认在当前进程的目录里创建文件。解决办法是尽量避免空白处右键改成在任意文件上右键触发。4.3 快捷键不生效或被占用在“系统设置”“键盘”“键盘快捷键”“服务”里绑定快捷键后过一会儿发现失灵了。先检查是不是和其他 App 的快捷键冲突。比如Control Shift Command N在部分版本的 Safari 里有别的含义可能会被优先拦截。可以换个更冷门的组合比如Control Option Command N实测冲突概率低很多。如果换了组合还是不行去“系统设置”“隐私与安全性”“辅助功能”里检查是否有某个 App比如截图工具、输入法在后台拦截快捷键。还有一个隐蔽的问题重启后“服务”里的自定义快捷键有时会被重置需要重新设置一次。这种事情我遇到过两三次后来习惯了每次系统大版本升级后都会主动检查一下。4.4 问题速查表症状最可能的原因解决办法右键没有快速操作子菜单快速操作类型选错或接收对象设错检查 Automator 顶部设置菜单显示但点击无反应辅助功能权限未开启系统设置 隐私与安全性 辅助功能文件建到了“/”或“~”脚本里没有用 dirname 获取目标目录统一用dirname $f拼接路径同名文件被覆盖touch 不会覆盖但如果脚本里用了重定向会清空旧文件用date %s或while [ -e ]判断快捷键无效被其他 App 抢占或系统重置换冷门组合键并检查权限中文目录/文件名乱码脚本编码问题在 Automator 顶部“Shell”选/bin/zsh文件保存为 UTF-85. 延伸思考与给新手的建议5.1 从 Automator 到 Shortcuts 的迁移路径很多用户不知道macOS 从 Monterey 开始把 iOS 上的“快捷指令”ShortcutsApp 搬到了 Mac 上并且 Automator 官方也明确表示未来会逐渐被 Shortcuts 替代。那这里提到的快速操作还能用吗答案是能而且短期内不会失效但新学自动化的建议看一下 Shortcuts。Shortcuts 里同样可以创建“快速操作”接收访达的文件夹或文件并且有专门的“打开文件夹”、“创建文件”等原生动作比 Shell 脚本更直观。不过 Shortcuts 对“在 Shell 中执行命令”这种高级操作的支持不如 Automator 直接你要是纯粹为了跑一段脚本Automator 依然更顺手。我的建议是如果你完全没接触过自动化从 Shortcuts 入手更友好如果你想要的是脚本灵活度保留 Automator 的方案完全没问题。5.2 原生工具优先稳住基本功在网上搜“mac os 下载软件”或者“mac os 镜像文件iso下载”这类关键词的人往往会陷入一种“先折腾系统再折腾工具”的路径。但我个人的体会是日常效率提升的优先级应该远远高于频繁重装系统、折腾镜像文件这类高成本操作。一个简单的 Automator 工作流配好一次能用好几年这才是真正的“生产力”。我的经验是不要一开始就用复杂工具链。先掌握 Automator 里三个基本操作拖入“运行 Shell 脚本”、理解$参数、善用touch和mkdir命令。就这三板斧已经能覆盖当前目录建文件、批量创建目录结构、自动生成带时间戳的模板文件这几个高频需求。等你用顺手了再慢慢扩展出更多的自动化流程比如批量重命名、图片压缩、PDF 合并用的都是同一套思维。5.3 最后的彩蛋找回“空白处右键新建”前面提过访达空白处右键默认不把“当前目录”作为参数传给快速操作这个限制对很多人来说很膈应。这里给一个折中方案用 AppleScript 获取访达当前窗口的路径再交给 Shell 脚本执行。快速操作的“运行 Shell 脚本”里可以改成先跑一小段osascriptdir$(osascript -e tell application Finder to get POSIX path of (target of front window as alias) 2/dev/null) if [ -z $dir ]; then dir$HOME/Desktop fi touch $dir/未命名文件.txt这段脚本通过 AppleScript 获取当前访达窗口正在浏览的目录然后在这个目录下创建文件。如果取不到目录比如访达没有打开任何窗口就默认在桌面创建。这个写法避开了“需要选中文件才能触发”的限制理论上任何位置都能用。不过要注意快速操作在访达里触发时系统仍需要有一个可接收对象的上下文所以最好还是绑定快捷键来配合使用。我自己目前的最终方案是一个快捷键负责“新建空白 txt”一个快捷键负责“新建带模板的 Markdown 并立刻打开”然后配合第三方快捷键工具把整个操作压到一次按键。这个组合我用了大半年稳定可靠几乎没出过问题。如果你也在为访达建文件效率发愁按这篇文章搭一套大概率能直接摆脱原来的别扭操作。