在Automator中通过终端复制文件

时间:2012-07-20 21:26:47

标签: terminal automator cp

所以以下问题似乎是在Automator中引起的,但我不能确定(我会发布图片,但我没有足够的分数):

我有一个Automator服务,其第一个操作是“获取指定的查找项目”工具,该工具转到~/Desktop/D53_C71J_C。下一个操作是包含

的“运行Shell脚本”
PATH="$@"
echo "Path: $PATH"
cd "$PATH"
for f in *;
do
    echo "f: $f"
    CAT="$PATH/$f"
    echo "CAT: $CAT"
    cp "$f" ~/Desktop
done 

结果

Path: /Users/ajharn/Desktop/D53_C71J_C
f: D53_C71J_C1.psd
CAT: /Users/ajharn/Desktop/D53_C71J_C/D53_C71J_C1.psd

f: D53_C71J_C1_MERGE.psd
CAT: /Users/ajharn/Desktop/D53_C71J_C/D53_C71J_C1_MERGE.psd
f: D53_C71J_C2.psd

等。这一切都有效,直到它到达cp。我已经用回声测试了这样的路径并排成一排。令人困惑的部分是cp D53_C71J_C2.psd ~/Desktop在终端中工作正常。

1 个答案:

答案 0 :(得分:0)

您选择的变量名称非常不明智:shell使用PATH来存储可执行文件所在目录的路径(请参阅the section on special shell parameters in the BashGuidebash man page)。由于cp是外部程序,而不是shell命令(可在/bin/cp找到),因此当您使用当前工作路径覆盖PATH时,shell找不到它 - 因此永远不会跑。

按照

的方式做更多事情
[[ -d "$@" ]] && cd "$@"                # cd into folder if is one
for f in ./*; do                        # always prefix relative globs
    [[ -f "$f" ]] && cp "$f" ~/Desktop  # only copy files
done

一切都会好的。当然,添加“获取文件夹内容”操作和“移动查找器对象”操作也可以,无需任何外壳干预。