automator可通过组合finder操作、shell脚本和applescript实现文件名与内容的批量替换:一、用“重命名finder项目”原生替换文件名;二、用sed或perl脚本替换文本内容并备份;三、借助awk、applescript或条件分支实现智能替换;四、通过移动文件、显示通知和记录日志完成闭环。

Automator 本身不直接支持“正则替换”或跨文件内容的深度文本处理,但通过组合 Finder 操作、Shell 脚本和 AppleScript,完全可以构建稳定、可复用的复杂文本批量替换自动化任务——关键是把“文件名替换”和“文件内容替换”分开设计,并用合适的方式串联。
一、批量替换文件名中的指定文字
这是 Automator 原生支持最稳妥的部分,无需编码,适合修正拼写、统一前缀、清理冗余字符等场景:
- 新建「快速操作」文档 → 设置“工作流接收当前”为「文件或文件夹」,位置选「访达」
- 拖入「重命名 Finder 项目」动作
- 选择「替换文本」:在“查找”栏填旧字符串(如 draft_),在“替换为”栏填新字符串(如 final_)
- 勾选「对所有项目应用此操作」,支持通配匹配(例如 *draft*.txt 可提前用「过滤 Finder 项目」限定范围)
- 保存后,选中文件右键 → 「快速操作」→ 点击名称即可执行
二、批量替换文件内容(文本正文)
文件内部文字的替换必须借助 Shell 脚本,Automator 提供安全容器来调用它。推荐使用 sed 或 perl,兼顾兼容性与功能:
- 新建「工作流程」或「应用程序」文档
- 先拖入「获取指定的 Finder 项目」,用于手动选取目标文件(如 .txt、.md、.csv)
- 再拖入「执行 Shell 脚本」动作,设置「传递输入」为「作为参数」
- 脚本示例(安全替换,备份原文件):
for f in "$@"; do
if [[ -f "$f" && "$(file -b "$f")" == *"text"* ]]; then
sed -i '.bak' 's/旧关键词/新关键词/g' "$f"
fi
done - 如需支持 Unicode 或复杂模式(如换行、括号),改用 perl:
perl -i.bak -pe 's/【待替换】/【新内容】/g' "$@"
三、带条件判断的智能替换(例如只改某几行、含特定上下文才替换)
单纯全局替换容易误伤。加入逻辑判断能大幅提升可靠性:
- 在 Shell 脚本中用 awk 定位行范围:
awk '/^# Title:/ {gsub(/v1\.0/, "v2\.1")} 1' "$f" > tmp && mv tmp "$f" - 或结合 AppleScript 获取用户确认(适合敏感替换):
拖入「运行 AppleScript」动作,脚本内弹出提示:
display dialog "即将替换所有 'TODO' 为 'DONE',确定吗?" buttons {"取消","继续"} default button "继续" - 也可用「如果」动作配合变量:先用 Shell 提取文件是否含某关键词(echo $(grep -c "pattern" "$f")),再分支决定是否执行替换
四、替换后自动归档与通知
让整个流程闭环,减少人工干预:
- 替换完成后,接「移动 Finder 项目」→ 目标设为 ~/Documents/已处理/,避免重复操作
- 加「显示通知」动作:标题写“文本替换完成”,消息写“共处理 $(ls "$@ "| wc -l) 个文件”(需用 Shell 提前存变量)
- 若需日志记录,可在 Shell 脚本末尾追加:
echo "$(date): $(basename "$f") 已更新" >> ~/Desktop/replace_log.txt











