macOS Automator执行Shell脚本重命名文件后移位问题修复
问题解答
1. 文件被移动到用户根目录的原因
- 传参逻辑认知偏差:当Automator文件夹动作配置
Pass input as arguments时,传入shell脚本的参数不是绑定的目标文件夹路径,而是本次触发动作的所有被拖入文件的完整绝对路径,例如拖入a.txt到/Users/myname/Desktop/bash_test,传入的参数是/Users/myname/Desktop/bash_test/a.txt。 - 相对路径默认指向用户根目录:
mv命令如果只写目标文件名、不写完整路径,会以脚本运行时的当前工作目录作为目标存储位置。Automator执行文件夹动作时,默认工作目录就是当前用户的根目录(即/Users/你的用户名/),因此最终文件被移动并重命名到了用户根目录下。 - 脚本存在语法笔误:循环处写的
for f in "@$"是错误写法,正确遍历所有传入参数的写法为"$@",原写法无法正确逐个读取传入的文件路径。
2. 修正后可保留文件在原目录的脚本
直接替换原有Run Shell Script模块内的代码即可,兼容zsh环境:
for f in "$@" do # 提取当前文件所属的原文件夹路径 original_dir=$(dirname "$f") # 重命名时指定目标路径为原文件夹,避免文件被移动 mv "$f" "$original_dir/Newfilename.txt" done
补充提示:如果单次操作会拖入多个txt文件,上述脚本会因为所有文件重名导致后移入的文件覆盖之前的文件。如需避免覆盖,可以给新文件名增加唯一标识,例如添加时间戳:
for f in "$@" do original_dir=$(dirname "$f") timestamp=$(date +%Y%m%d%H%M%S) mv "$f" "$original_dir/Newfilename_${timestamp}.txt" done
内容的提问来源于stack exchange,提问作者Offt_madone
相关产品推荐
相关产品推荐

