You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Automator脚本按文件名日期归类文件至YYYY-MM-DD目录

解决Automator操作文件夹自动归类文件无反应问题

一、先确认Automator的基础配置有没有错

  • 你的“操作文件夹”工作流得这么设:
    • 工作流接收的输入是文件夹中的文件,不是“文件夹”本身
    • 顶部“工作流收到当前”选“文件夹”,记得勾选“替换所选文本”(如果需要)
    • 脚本动作的“传递输入”必须设为作为自变量,别选“到标准输入”——这是很多人踩坑的点!

二、给你一个亲测可用的修正版Bash脚本

原脚本大概率是路径处理、正则匹配或者目录创建的逻辑有问题,换下面这个试试:

for f in "$@"; do
    # 跳过目录,只处理文件
    if [ -d "$f" ]; then
        continue
    fi

    # 从文件名里抠出YYYYMMDD部分
    filename=$(basename "$f")
    if [[ $filename =~ ^([0-9]{8})_[0-9]{6} ]]; then
        date_str=${BASH_REMATCH[1]}
        # 转成YYYY-MM-DD格式的目录名
        target_dir="${date_str:0:4}-${date_str:4:2}-${date_str:6:2}"
        # 拿到文件所在的父目录,在同位置创建分类文件夹
        parent_dir=$(dirname "$f")
        full_target_dir="$parent_dir/$target_dir"

        # 创建目标目录(不存在就建,存在也不报错)
        mkdir -p "$full_target_dir"
        # 移动文件,-n是防止同名文件被覆盖,不需要可以删掉
        mv -n "$f" "$full_target_dir/"
    fi
done

三、几个关键细节解释

  • "$@":能正确接收Automator传过来的所有文件路径,带空格的文件名也不会出错,一定要用双引号包着
  • basename/dirname:分别提取纯文件名和父目录地址,避免路径拼接出错
  • mkdir -p:自动创建多级目录,而且目录已经存在的话也不会报错,很省心
  • 正则^([0-9]{8})_[0-9]{6}:严格匹配文件名开头的YYYYMMDD_HHMMSS格式,只处理符合规则的文件,不会乱操作其他文件

四、如果还是不行,排查权限和调试

  • 检查文件和文件夹的权限:当前用户得对源文件和要创建目录的位置有读写权限
  • 可以在脚本第一行加set -x开启调试模式,然后跑一次,打开Automator的“窗口→显示日志”,看具体哪一步出问题,方便定位

内容的提问来源于stack exchange,提问作者user20266964

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:31:15