Automator向Shell脚本传参配合Exiftool批量重命名问题求解
Automator 配合 Exiftool 实现批量重命名的配置方案
你当前已完成的操作配置参考:
Automator操作截图
具体实现步骤如下:
- 移除当前流程里多余的变量存储、拆分动作,直接将「获取所选的访达项目」的输出连接到「运行Shell脚本」动作。
- 在「运行Shell脚本」的配置项里,将Shell选择为
/bin/bash或者/bin/zsh,传递输入选项选择「作为自变量」,此时上游传入的所有选中文件会自动作为Shell的位置参数存在,天生就是从1开始计数:$1对应选中的第一个文件、$2对应第二个,以此类推,完全不需要额外调整数组起始键位。Shell默认的$0是当前脚本自身的运行路径,不会占用文件参数的索引位。 - 直接在脚本编辑区写入Exiftool命令即可,全量处理所有传入文件时用
"$@"指代所有传入的文件路径,该写法会自动适配带空格、特殊字符、中文的文件名,支持1-100个甚至更多文件的批量处理,不需要手动写循环。按EXIF拍摄日期重命名的基础示例代码如下:
# 重命名格式为年月日_时分秒,重名自动加序号,-overwrite_original表示不生成原文件备份,不需要可删除 exiftool -overwrite_original -d "%Y%m%d_%H%M%S%%-c.%%e" "-FileName<CreateDate" "$@"
- 如果需要单独对第一个传入的文件执行特殊逻辑,直接引用
"$1"即可;如果处理完第一个文件后要对剩下所有文件执行操作,先执行shift命令移除第一个位置参数,后续再调用"$@"就会自动获取从第二个文件开始的剩余所有文件。
配置注意事项
- 所有文件路径的变量引用必须包裹双引号,否则文件名包含空格、特殊符号时会出现识别错误。
- 不建议用Automator自带的变量拆分功能逐个传递文件,多文件场景下该方案稳定性差、运行效率低,用Shell自带的位置参数接收上游输入是兼容性最好的方案。
- 如果已经将文件列表存为Automator数组变量传入Shell,需要从索引1开始读取元素的话,可以用
${files[@]:1}语法截取数组(假设数组变量名为files),但该场景下完全没必要多做这一步变量存储操作。
内容的提问来源于stack exchange,提问作者Ralph Schipper
相关产品推荐
相关产品推荐

