Скопируйте файлы через терминал в Automator

Итак, следующая проблема, похоже, вызвана Automator, но я не могу быть уверен (я бы разместил изображение, но у меня недостаточно баллов):

У меня есть служба Automator, первым действием которой является инструмент «Получить указанные элементы Finder», который переходит к ~/Desktop/D53_C71J_C. Следующее действие — «Выполнить сценарий оболочки», содержащий

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 отлично работает в Терминале.


person Sleepykrooks    schedule 20.07.2012    source источник


Ответы (1)


Вы очень неразумно выбрали имя переменной: PATH используется оболочкой для хранения пути к каталогам, в которых находятся исполняемые файлы (см. раздел о специальных параметрах оболочки в BashGuide и справочная страница bash). Поскольку cp является внешней программой, а не командой оболочки (она находится в /bin/cp), она не обнаруживается оболочкой, когда вы перезаписываете PATH вашим текущим рабочим путем, и поэтому никогда не запускается.

Сделайте что-нибудь еще в духе

[[ -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

и все будет хорошо. Конечно, добавление действия «Получить содержимое папки» и «Переместить объекты Finder» тоже будет работать без вмешательства оболочки.

person kopischke    schedule 21.07.2012
comment
Ах, я должен был заметить, что такое простое слово, вероятно, было ключевым словом. Спасибо и за эти ссылки. Поскольку я все еще новичок в написании сценариев оболочки, я ценю объяснения того, почему это было неправильно. Большое спасибо за Вашу помощь! - person Sleepykrooks; 23.07.2012