使用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
相关产品推荐
相关产品推荐

