automator可通过组合动作、变量、条件判断与shell脚本实现类规则引擎的智能文件分类。核心是构建带优先级和兜底的可维护结构:先用变量提取文件属性,再以嵌套“如果”或shell脚本(支持正则、多条件)逐级匹配并归类,还可结合文件夹操作与日志通知提升健壮性。
automator 本身不提供“规则集”式配置界面,但可以通过组合动作、变量、条件判断与脚本嵌入,实现接近专业分类引擎的灵活逻辑。关键不是堆砌动作,而是构建可扩展、可维护、带优先级和兜底机制的结构。
用变量+条件分支模拟多级分类规则
Automator 的“如果”操作是规则分流的核心。你可以把文件属性(如名称、扩展名、大小、创建时间)先存为变量,再逐层判断,形成类似 if-else if-else 的链式逻辑。
- 拖入“获取指定的 Finder 项目”或“请求访达项目”,作为输入入口
- 接“设定值为变量”,例如设 name_var = 文件名,ext_var = 扩展名,size_var = 大小(字节)
- 拖入第一个“如果”操作:判断 ext_var 是否匹配 .*\.(pdf|docx|xlsx)$(正则需配合 AppleScript 或 Shell 实现,纯 Automator 只支持简单后缀匹配;更推荐后续用 Shell 做精准匹配)
- 在“然后”中放入“移动 Finder 项目”到 ~/Documents/Office;在“否则”中继续嵌套下一个“如果”
- 第二层判断 name_var 是否包含 Invoice 或 账单,命中则移至 ~/Documents/Finance
- 最后一层“否则”设为默认路径,比如 ~/Documents/Others,避免遗漏
用 Shell 脚本承载真正的规则引擎
当分类逻辑变复杂(如含模糊匹配、多关键词、路径继承、哈希校验),纯图形界面会很快受限。此时直接嵌入 Shell 脚本是最务实的选择,它能复用成熟的文本处理能力。
- 新建工作流,类型选“快速操作”或“应用程序”
- 拖入“运行 Shell 脚本”,Shell 设为 /bin/zsh(macOS 默认),传递方式选 “作为自变量”
- 粘贴以下轻量规则脚本(支持扩展):
for f in "$@"; do [[ -f "$f" ]] || continue basename=$(basename "$f") dir=$(dirname "$f") <h1>规则1:发票类(含关键词)</h1><p>if [[ "$basename" =~ Invoice|invoice|账单|BILL ]]; then target="$HOME/Documents/Finance"</p><h1>规则2:图片类(扩展名+尺寸过滤)</h1><p>elif [[ "$basename" =~ .(jpg|jpeg|png|heic)$ ]] && [ $(stat -f "%z" "$f") -gt 5242880 ]; then target="$HOME/Pictures/Originals"</p><h1>规则3:报告类(名称含Report且为PDF)</h1><p>elif [[ "$basename" =~ Report.*.pdf$ ]]; then target="$HOME/Documents/Reports" else target="$HOME/Documents/Others" fi</p><p>mkdir -p "$target" cp "$f" "$target/" done</p>
保存后,该服务即可在访达中右键调用,所有逻辑由 Shell 统一调度,增删规则只需改脚本,无需重排 Automator 动作。
一款AI工具,主要用于使用 Codex CLI 进行深度网络搜索,适用于需要多源综合分析的复杂查询。当 `web_search`(Brave)返回结果不足,或用户……时使用,适合需要提升相关任务效率的用户。
用文件夹操作实现零干预自动归类
把分类变成“被动响应”,适合长期运行的交付目录(如 ~/Downloads 或专用 Drop 目录)。一旦文件落进指定文件夹,Automator 自动触发整套规则。
- 新建文稿,选择“文件夹操作”类型
- 设置目标文件夹(如 ~/Dropbox/AutoSort),勾选“对已存在于文件夹中的项目重复此工作流程”
- 拖入“获取文件夹内容”,再接“对每个项目重复”
- 内部放入上一步的 Shell 脚本动作,或分层“如果”动作组
- 建议结尾加“移动 Finder 项目”到源文件夹的 .processed 子目录,或加“显示通知”提示归类完成
补充健壮性:错误处理与日志记录
真实场景中,权限不足、路径不存在、文件被占用都会导致失败。加几行简单逻辑就能大幅提升可靠性。
- 在 Shell 脚本开头加入:set -e(出错即停)和 set -u(未定义变量报错)
- 每条 cp/mv 命令后加:&& echo "$(date): moved $f → $target" >> ~/Library/Logs/AutoSort.log
- 若需通知用户失败项,可在末尾加:if [ $? -ne 0 ]; then osascript -e 'display notification "归类失败,请检查日志" with title "AutoSort"' ; fi










