【问题标题】:Copy files through terminal in Automator在 Automator 中通过终端复制文件
【发布时间】:2012-07-21 21:43:48
【问题描述】:

所以以下问题似乎是在 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 在终端中运行良好。

【问题讨论】:

    标签: terminal automator cp


    【解决方案1】:

    您非常不明智地选择了变量名: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
    

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

    【讨论】:

    • 啊,我应该注意到这样一个基本的词可能是一个关键字。也感谢您提供这些链接。由于我对 shell 脚本仍然很陌生,我也很欣赏关于为什么它是错误的解释。非常感谢您的帮助!
    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2015-01-17
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多