ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Mac右键新建文件:Automator、快捷指令与终端模板法实战

Mac右键新建文件:Automator、快捷指令与终端模板法实战

1. 先想明白:Mac 右键里为什么压根没有“新建文件”

用了十几年 Mac 的人,第一次从 Windows 迁过来,最容易犯的一个毛病就是:在桌面空白处右键,找“新建文本文档”,找了两分钟没找到,然后怀疑自己鼠标坏了。Mac 右键新建文件这件事,不是系统坏了,也不是你不会用,而是 macOS 从设计之初就没打算把这个动作放在右键菜单里。想快速新建 txt、Word、Excel 这些常用格式,得先理解它背后的逻辑,再决定用哪种方式补上这个能力。

1.1 Finder 的逻辑是“应用优先”,不是“文件系统优先”

Windows 资源管理器的思路是“文件系统优先”:右键是操作文件系统的入口,所以有新建、有属性、有格式化。Finder 的思路是“应用优先”:文件是应用产生的副产品,Finder 只负责组织和展示,不负责凭空造一个文件。你在 Finder 里点“新建”,系统其实不知道该给你建什么、用什么打开、归谁管,因为一个零字节的空文件在 macOS 眼里是没有类型的。

这一点和 macOS 的类型识别机制有关。系统用统一类型标识(UTI)来判断一个文件是什么、该由哪个应用打开,而这个标识往往依赖扩展名和文件头信息。一个刚建的、内容为空、扩展名还要靠你手动补的文件,在系统看起来就是个模糊对象。所以系统干脆把“新建文档”这件事交还给应用本身:要写文档就打开文档应用,要记便签就用便签,Finder 不掺和。这个设计在“应用生态丰富”的前提下是合理的,但对习惯了右键新建的人来说,就是纯纯的体验缺口。

更实际的一层原因:Finder 的右键菜单是动态构建的,系统会根据当前选中的对象类型、已安装的扩展、系统版本动态拼菜单。早期系统并没有给第三方开放“新建文件”这个动词,后来虽然开放了“快速操作”和“访达扩展”两个口子,但入口依然藏得比较深,很多人根本不知道有这回事。

1.2 三种补法,成本与体验差得很远

我踩过的坑是:一开始图省事装了个右键增强工具,用了半年,系统大版本一升级,扩展失效,右键菜单直接变成空白,还找不到卸载残留。后来才老老实实回到系统自带的两条路上。目前能实现“Mac 快速新建 txt”的方案,按成本从低到高大概分三层:

  • 临时性方案:终端touch一条命令,或者把模板文件拖到目标文件夹再改名。零成本、零安装,适合偶尔用一次。
  • 常驻性方案:用系统自带的“自动操作”(Automator)或“快捷指令”,做成“快速操作”,直接挂在右键菜单的“快速操作”子菜单里。一次配置,长期可用,系统升级基本不受影响。
  • 增强性方案:第三方右键菜单增强工具。开箱即用、支持格式多,但要装访达扩展、要授权限,稳定性取决于工具维护情况。

提示:如果你只是偶尔需要新建一个 txt 记点东西,别折腾工具,先学会终端那一条命令就够了。工具是给“每天要建十几个文件”的人准备的。

1.3 先对号入座,再决定动手

不同使用强度的人,最优解完全不同。我在下面这张表里把常见人群和推荐路径对上了,你可以直接对照自己的情况选,不用把三种方案全做一遍。

使用场景每日新建文件量推荐方案配置耗时稳定性
偶尔记笔记、写临时文本1 至 3 个终端touch或模板拖拽10 秒极高
日常写文档、做表格5 至 20 个自动操作做快速操作20 分钟高
多格式混用、还要建演示稿20 个以上模板仓库 + 多套快速操作40 分钟高
不想碰脚本、要开箱即用任意右键增强类工具5 分钟看工具维护
需要跨设备一致体验任意快捷指令15 分钟中高

选方案的核心判断标准只有两条:你愿不愿意花二十分钟配置,以及你能不能接受系统大版本升级后重新折腾一次。想清楚这两点,后面就简单了。

2. 方案选型:系统自带的两条主力路径怎么选

2.1 自动操作与快捷指令,差别比想象中大

系统自带的两条路——自动操作和快捷指令——表面看都能做“右键新建文件”,实际能力边界差挺多。自动操作是老牌的工作流工具,优势是能直接嵌 AppleScript 和 Shell 脚本,做文件操作、路径判断、重名处理这些事非常顺手,生成的.workflow文件还能直接拷贝给别人用、扔进备份盘,换机器复制过去就能跑。缺点是界面老气,动作库里的动作命名有点反直觉,新手第一次找“运行 AppleScript”这个动作要找半天。

快捷指令是后起之秀,界面友好,能跟手机、平板同步,做“在 Finder 中显示”这类入口也很方便。但它的脚本能力相对弱,复杂逻辑要靠“运行 AppleScript”动作转一道手,而且在 Finder 里的入口有时候会被系统藏起来,需要手动去设置里勾选“在访达中显示”。

我的建议很直接:**逻辑复杂、要处理重名、要读模板的,用自动操作;只是想在多台设备上有一致的动作,用快捷指令。**两者并不冲突,我现在是自动操作做主力,快捷指令留了一个“快速新建文本”作为备用。

2.2 第三方右键增强工具,能用但要看清边界

市面上有一批专门做右键菜单增强的工具,装上之后右键里会多出“新建文件”菜单,支持 txt、docx、xlsx、pptx、md 等几十种后缀,有的还能自定义模板、加“用指定应用打开”。体验确实最接近 Windows,配置成本也最低。

但我必须提醒几件事。第一,这类工具大多依赖访达扩展,扩展需要单独在系统设置里授权,很多人装完发现右键没反应,就是扩展没启用。第二,访达扩展的加载受系统版本影响很大,大版本升级后扩展失效是常见现象,我曾经遇到过一次升级后右键菜单直接变成一片空白,排查了半天才发现是扩展崩了。第三,部分工具会在后台读取目录信息,涉及隐私,装之前最好看一眼它的权限申请和更新频率,长期不更新的工具谨慎使用。

2.3 终端和模板拖拽,别小看这两个土办法

终端方案被严重低估了。touch 文件名.txt这一条命令,在任何目录下都能一秒钟建好文件,配合cd或者直接把终端窗口拖到目标文件夹,效率其实比右键还高。模板拖拽法更原始:准备一个“模板”文件夹,里面放好空白 txt、空白 docx、空白 xlsx,需要的时候按住 Option 键把它拖到目标目录,系统会自动生成副本而不是移动原文件。

这两个办法的共同优点是零配置、零依赖、永远不会因为系统升级失效。缺点是它们不解决“我要在当前位置立刻建一个文件”这个动作的连贯性。所以你经常会看到一种组合:日常用快速操作,批量或临时用终端,两者互补。

3. 手把手实操一:用“自动操作”做一个通用的新建文本文件

3.1 创建快速操作的完整流程

打开“自动操作”(在启动台或聚焦搜索里搜“自动操作”就能找到),弹出的模板选择窗口里选“快速操作”,不要选“应用程序”。这一步选错,后面做出来的东西就没法挂到右键菜单上。

新建之后,在右侧顶部的两个下拉框里设置工作流接收的输入。第一个选“文件夹”,第二个选“访达”。这里是最关键的一步,也是绝大多数人第一次做失败的原因:**如果你把输入类型设成“文件”,那么在文件夹空白处右键时,因为当前没有选中任何文件,这个快速操作根本不会出现在菜单里。**设成“文件夹”之后,你在空白处右键、或者选中一个文件夹右键,都能触发它。

接着在左侧动作库里搜“运行 AppleScript”,把它拖到右边的工作区。默认代码是on run {input, parameters}开头的那段,整个替换成我下面的版本。最后按 Cmd+S 保存,名字就叫“新建文本文件”,保存位置保持默认即可,它会被自动放进系统的服务目录。

3.2 一段能直接跑通的脚本与逐行解释

下面这段是我在实际使用中反复调整过的版本,处理了“选中文件时建在哪”“选中文件夹时建在哪”“空白处右键建在哪”“重名自动加序号”这几个最容易出问题的场景:

on run {input, parameters} set baseName to "未命名" set extName to "txt" if (count of input) > 0 then set selPath to POSIX path of (item 1 of input) set isDir to (do shell script "test -d " & quoted form of selPath & " && echo yes || echo no") is "yes" if isDir then set folderPath to selPath else set folderPath to do shell script "dirname " & quoted form of selPath end if else tell application "Finder" to set folderPath to POSIX path of (target of front window as alias) end if if folderPath does not end with "/" then set folderPath to folderPath & "/" set filePath to folderPath & baseName & "." & extName set i to 2 repeat while (do shell script "test -e " & quoted form of filePath & " && echo yes || echo no") is "yes" set filePath to folderPath & baseName & " " & i & "." & extName set i to i + 1 end repeat do shell script "touch " & quoted form of filePath tell application "Finder" to reveal (POSIX file filePath as alias) return filePath end run

逐段说清楚。前半段判断当前上下文:如果右键时选中了东西,就拿第一个选中项的路径,再用 shell 的test -d判断它是文件夹还是文件,是文件夹就直接当目标目录,是文件就取它的父目录。如果没有选中任何东西,就取访达最前面那个窗口的当前目录。这里用target of front window而不是insertion location,是因为前者在绝大多数场景下更稳,后者在某些系统版本里返回的路径会带上额外层级。

中间那段是重名处理。直接touch一个已存在的文件不会报错,但会把原文件的时间戳改掉,而且不会生成新文件,你会以为脚本没跑。所以先用test -e探测,撞名就加空格和序号,直到不冲突为止。

最后两行,touch建文件,reveal在访达里选中它。reveal这一句我强烈建议保留,因为文件建出来之后你大概率要马上改名或者打开,自动选中能省掉一次手动找的动作。所有路径拼接都用了quoted form of,这是处理中文路径、带空格路径的关键,少了它,路径里有空格就会直接报错。

3.3 挂快捷键、改名、复制给其他格式

保存之后,立刻去测试:在桌面空白处右键,看“快速操作”子菜单里有没有“新建文本文件”。如果没有,先别急着改脚本,去系统设置里的键盘快捷键页面,找到“服务”分类,往下翻,勾选刚做出来的这一项。有些版本里它归在“快速操作”分类下,位置不太一样。

快捷键我配的是 Control+Option+N,理由是它跟系统自带的 Cmd+Shift+N(新建文件夹)形成一组,肌肉记忆不会打架。配置入口同样在键盘快捷键的“服务”或“快速操作”里,点右边的“添加快捷键”录制组合键。注意别跟应用内的快捷键冲突,比如某些编辑器里 Control+Option+N 是有别的含义的。

想再做 Word 和 Excel 的版本,最省事的办法不是重写脚本,而是把这段脚本复制一份,只改开头两行的baseName和extName,再用模板法(下一章讲)替换touch那一句。这样你右键菜单里会出现“新建文本文件”“新建 Word 文档”“新建 Excel 表格”三条,各配一个快捷键,用起来就完全是 Windows 的手感了。

4. 手把手实操二:把 Word、Excel、Pages 这些格式也拉进右键

4.1 为什么文档类必须用模板法

txt 是纯文本,touch建一个空文件就能直接用。但 docx、xlsx、pptx 这些格式本质上是压缩包结构,里面有一堆 XML 定义样式、页面、主题,你touch出来的零字节文件,双击照样打不开,或者打开了报错说文件损坏。这不是权限问题,是格式决定的。

所以文档类必须走模板法:先手工做一份“空白但已配置好样式”的模板文件,放在固定目录里,新建的时候用cp把它复制到目标位置再改名。这样做还有个额外好处——你可以把常用的格式预先写进模板,比如 Word 模板里设好中文字体、行距、页边距,Excel 模板里冻结首行、设好列宽、写好表头,每次新建出来的文件直接就是能用的状态,省掉每次调格式的时间。

4.2 建一个属于你的模板仓库

在家目录下建一个名为Templates的文件夹,路径就是~/Templates/。这个名字别用中文,别带空格,后面写脚本会省很多事。然后往里放模板文件,我的命名习惯是在文件名前加“空白”两个字,一眼能看出它是模板:

目标格式模板文件名扩展名建议预置内容
纯文本空白文本.txttxt无,或写一行编码声明
Word 文档空白文档.docxdocx中文字体、首行缩进、1.5 倍行距
Excel 表格空白表格.xlsxxlsx冻结首行、列宽、常用表头
演示文稿空白演示.pptxpptx母版配色、标题占位符
富文本空白富文本.rtfrtf字号、字体
Markdown空白笔记.mdmd常用 Front Matter 头

制作模板的要点:打开对应应用,新建一个空文档,把样式调好,然后另存为到~/Templates/,文件名按上表来。千万别在里面留任何正文内容,否则每次新建都要手动删。Word 的模板如果不小心留了空段落,可以在保存前全选删除再保存。

注意:模板文件本身不要设成只读,有些同步工具会把只读属性带到副本上,导致新建出来的文件改不了。如果确实想防止误改模板,可以复制完成后再给副本加写权限。

4.3 一个通用的“从模板新建”脚本

把第 3 章那段脚本的结尾改掉,换成从模板复制。完整版本如下,注意tplName这一行,换格式就改这一行:

on run {input, parameters} set tplName to "空白文本.txt" set tplPath to (POSIX path of (path to home folder)) & "Templates/" & tplName -- 目标目录判断,逻辑同上 if (count of input) > 0 then set selPath to POSIX path of (item 1 of input) set isDir to (do shell script "test -d " & quoted form of selPath & " && echo yes || echo no") is "yes" if isDir then set folderPath to selPath else set folderPath to do shell script "dirname " & quoted form of selPath end if else tell application "Finder" to set folderPath to POSIX path of (target of front window as alias) end if if folderPath does not end with "/" then set folderPath to folderPath & "/" -- 从模板名推导出新文件名和扩展名 set AppleScript's text item delimiters to "." set nameParts to text items of tplName set extName to last item of nameParts set baseName to text 1 thru -2 of tplName set AppleScript's text item delimiters to "" set filePath to folderPath & baseName & "." & extName set i to 2 repeat while (do shell script "test -e " & quoted form of filePath & " && echo yes || echo no") is "yes" set filePath to folderPath & baseName & " " & i & "." & extName set i to i + 1 end repeat do shell script "cp " & quoted form of tplPath & " " & quoted form of filePath tell application "Finder" to reveal (POSIX file filePath as alias) return filePath end run

关键改动就两处:一是cp替代touch,二是从模板文件名自动推导扩展名和基础名,这样你复制多份脚本时只需要改tplName一行,其他全不用动,出错概率大幅下降。text 1 thru -2 of tplName这一句是去掉最后一个字符,配合前面按点切分,刚好把扩展名剥掉,逻辑上有点绕但很稳。

保存时给每条起一个明确的名字:“新建文本文件”“新建 Word 文档”“新建 Excel 表格”“新建 Markdown 笔记”。名字里带格式,右键菜单里一眼就能认出来。如果你的菜单里项太多,可以做个二级归类,名字统一加个前缀,比如都叫“新建 - xxx”,排序上会聚在一起。

4.4 快捷指令版本,作为跨设备的备份方案

如果家里有多台 Mac,或者你想在平板、手机上也有类似动作,可以用快捷指令做一个平行的版本。流程是:新建快捷指令,添加“运行 AppleScript”动作,把上面的代码贴进去,然后在快捷指令的详情设置里勾选“在访达中显示”或者“用作快速操作”,接收输入类型设为文件夹。

快捷指令版本的短板是脚本调试体验差,报错信息不如自动操作直观,而且“在访达中显示”这个开关在不同系统版本里的位置会变。但它有个独特优势:动作本身会同步到你的其他设备,换电脑登录账号之后,右键菜单直接就有了,不用重新配置。

5. 手把手实操三:终端与键盘流的高效补充

5.1 几条真正好用的终端命令

终端方案我用了很多年,几条命令记熟之后,速度其实比右键还快。最基础的建空文件:

touch ~/Desktop/未命名.txt

带内容一起建的,用重定向:

echo "第一条记录" > ~/Desktop/记录.md

要建一个带多行内容的文件,用 heredoc 更干净,不用来回敲转义:

cat > ~/Desktop/会议记录.md <<'EOF' # 会议记录 日期: 参会人: 结论: EOF

从模板复制,跟脚本里的逻辑一样,但可以批量:

cp ~/Templates/空白表格.xlsx ~/Desktop/日报.xlsx

批量建同名前缀的一组文件,用循环,比手点快一百倍:

for i in 01 02 03 04 05; do cp ~/Templates/空白文本.txt ~/Desktop/笔记$i.txt; done

在终端里最实用的一个习惯:先cd到目标目录,后面的命令就全用相对路径,省得每条都写一长串绝对路径。把终端窗口拖到目标文件夹上,路径会自动填进去,这个操作很多人不知道。

5.2 用 open 命令直接起应用并建新档

有些场景你不想要空白文件,而是想直接打开应用开始写。这时用open -a指定应用,再跟上文件路径:

open -a "TextEdit" ~/Desktop/草稿.txt open -a "Pages" ~/Desktop/新文稿.pages

open -a后面跟的是应用名称,名称里有空格就用引号包起来。如果应用已经打开,这条命令会把文件交给已打开的实例;如果没打开,会先启动再打开文件。配合前面的touch,就变成“先建文件再打开编辑器”一条龙:

f=~/Desktop/草稿-$(date +%H%M).txt; touch "$f" && open -a "TextEdit" "$f"

这里用$(date +%H%M)生成带时间的文件名,避免撞名,一条命令解决建文件、开编辑器两件事。&&保证只有touch成功才执行打开,不然会弹一个“文件不存在”的报错。

5.3 编码、扩展名这些容易翻车的地方

用终端建的文件默认是 UTF-8 无 BOM,这本身没问题,问题出在打开它的应用上。系统自带的文本编辑默认是富文本模式,你打开一个.txt,它可能按 RTF 处理,存回去就变成了.rtf或者带一堆格式标记。正确姿势是打开后在菜单里切到“制作纯文本”,或者干脆在文本编辑的偏好设置里把默认格式改成纯文本。

扩展名隐藏是另一个高频坑。系统默认隐藏已知类型的扩展名,你建了一个未命名.txt,访达里显示的是“未命名”,你以为没建成功,其实是建好了只是没显示后缀。可以按 Cmd+I 看简介,或者在访达设置里勾选“显示所有文件扩展名”。这里有个小提醒:显示扩展名之后,改文件名时务必保留后缀,很多新手手一抖把.docx删了,文件就打不开了——扩展名一改,系统就不知道它是什么类型,双击也不会用正确的应用打开。

还有一条:**touch出来的零字节文件,在某些同步盘里会被忽略。**我自己踩过这个坑,在云盘目录里建了个空 txt,本机看得见,另一台机器上死活同步不过去,折腾半天才发现是同步工具跳过了空文件。解决办法很简单,建的时候顺手写一个字符进去:

printf '\n' > ~/云盘目录/未命名.txt

一个换行符,文件大小变成 1 字节,同步就正常了。这个细节任何教程都不会写,但真碰上能省你半小时。

6. 常见问题排查实录:右键没反应到底卡在哪

6.1 快速操作不出现或灰掉,按这个顺序查

这大概是被问得最多的问题。排查顺序我整理成了一条链路,跟着走基本能定位:

第一步,确认输入类型。回去打开自动操作,看工作流的两个下拉框是不是设成了“文件夹”和“访达”。设成“文件”是最常见的失败原因,因为文件夹空白处右键时没有选中文件,条件不满足,菜单项直接不显示。这一步占了我见过的问题里的七成。

第二步,确认服务已勾选。系统设置 → 键盘 → 键盘快捷键 → 服务(或快速操作),找到你刚做的项,看左边的勾有没有打上。系统有时候会把新加的服务默认设为不启用。

第三步,确认文件存在。快速操作保存后会生成一个.workflow文件,可以去~/Library/Services/目录看一眼,有没有对应的文件夹。如果没有,说明保存那一步失败了,可能是名字冲突或者磁盘权限问题,重新保存一次换个名字试试。

第四步,重启访达。按住 Option 键右键点访达图标,选“重新开启”,或者用活动监视器强制退出访达,它会自动重启。服务列表是访达启动时加载的,新加的服务有时候要重启才认。

6.2 权限报错和云盘目录的坑

脚本第一次运行时,系统会弹权限请求,问你是否允许自动操作控制访达、是否允许访问某些文件夹。这时候一定要点允许,点拒绝之后不会每次都弹,而是静默失败,你会看到脚本跑完什么也没发生。报错码-1743就是典型的权限被拒。

修复路径在系统设置 → 隐私与安全性,分别看“自动化”“文件和文件夹”“完全磁盘访问权限”三个分类,把自动操作加进去。有个细节:加完之后最好退出自动操作再重开,权限变更才生效。

云盘目录是另一个重灾区。桌面和文稿目录如果开了云同步,实际路径可能被重定向到一个隐藏的本地缓存目录,脚本里用path to desktop拿到的路径和访达显示的路径可能对不上。我遇到过reveal报“找不到文件”,但文件明明在桌面上。解决办法是改用访达当前窗口的实际路径,或者干脆避开云同步目录做测试,确认脚本逻辑没问题再切回去。

外置磁盘和网络卷也有类似问题,部分快速操作在这些位置不可用,因为系统对非本地卷的支持有限。这不是你配置错了,换个本地目录试一下就能确认。

6.3 常见问题速查表

现象最可能的原因处理方式
右键菜单里找不到快速操作输入类型设成了“文件”改回“文件夹”并重新保存
菜单项是灰的点不动服务未勾选启用键盘快捷键设置里勾选
点了之后毫无反应脚本权限被拒隐私与安全性里授权自动化
报错说找不到文件云同步目录路径被重定向换本地目录测试或改用实际路径
建出来的文件双击打不开零字节或扩展名被改写入至少一个字符,保留后缀
中文文件名乱码编码不是 UTF-8用quoted form of包路径,统一 UTF-8
文件建到了错误的位置前台窗口判断失准先选中目标文件夹再触发
大版本升级后全部失效服务缓存或扩展失效重启访达,必要时重存一次

6.4 两条我踩过坑之后的经验

第一条:**脚本先在脚本编辑器里跑通,再贴进自动操作。**自动操作的报错提示很简陋,就一句“运行 AppleScript 动作时出错”,具体是哪一行、什么原因一概不说。而在脚本编辑器里,语法错误会直接标红,运行结果和返回值也看得见。我现在的习惯是先在脚本编辑器里用硬编码路径测试逻辑,跑通了再把路径判断那段换掉,贴进自动操作,一次成功率能到九成以上。

第二条:**给脚本加一个显式的返回值和提示。**自动操作里脚本返回值默认会被传给下一个动作,如果后面没有动作,返回值就被丢弃了。但你可以在最后加一句display notification,建完文件弹一条通知,确认动作真的执行了。这比盯着文件夹看快多了尤其在你同时开了十几个窗口的时候:

display notification filePath with title "文件已创建"

7. 我现在的组合方案,以及几条不写在文档里的建议

折腾到现在,我最终的配置是:主力用自动操作做的四个快速操作,分别对应 txt、docx、xlsx、md,各配一个快捷键;模板仓库放在家目录的Templates下,用 Git 做版本管理,换机器直接克隆下来就能用;终端留了两条别名命令放在 shell 配置文件里,处理批量任务;第三方工具一个都没装。

关于快捷键的搭配,我摸索出的规律是:不要贪多,四个以内,全部用 Control+Option 作为前缀,后面跟一个和格式相关的字母,比如 T 对应 txt、W 对应 Word、X 对应 Excel、M 对应 Markdown。前缀统一的好处是记忆负担低,按错键也只是弹出个无关的菜单,不会误操作别的东西。超过四个快捷键,你大概率会记混。

关于模板维护,我的做法是每个季度打开模板文件检查一遍,把样式过时的、字体被系统替换掉的修一修,顺手清掉误存的正文内容。听起来很琐碎,但新建出来的文档格式统一,比每次新建完再调格式省的时间多得多。特别是表格模板,把常用的列宽、数字格式、冻结窗格都预置好,日报、周报写起来是真的快。

最后说一个容易被忽略的点:如果你经常在同一个目录下建一堆文件,与其每次新建完再改名,不如把脚本里的baseName改成带日期时间格式的,比如用 shell 命令date +%Y%m%d-%H%M生成文件名。这样建出来的文件天然有序、天然不重名,后面按文件名排序就能找到,省掉“未命名 3”这种看着就烦的名字。我用了这个改动之后,桌面上再也没出现过“未命名 27”这种文件。

返回列表