Automator: скрипт оболочки для файлов в папке

Я пытаюсь создать простое приложение с Automator, это приложение должно объединить все текстовые файлы в определенной папке в один CSV-файл. Это скрипт:

cat *.txt >merged.csv

Это работает нормально, если я открываю терминал, перехожу в папку, содержащую файлы, и выполняю его.

Я хотел бы, если возможно, сделать так, чтобы оно работало как приложение, в которое я перетаскиваю папку на значке приложения, а затем в папке создается объединенный файл. Затем покажите уведомление о выполненной работе.

Я попробовал это:

введите описание изображения здесь

Но это дает мне ошибку в оболочке (пока в терминале работает нормально). Что я делаю неправильно?

1 ответ

Решение

Вы должны изменить свой Run Shell Script действие для ввода as arguments - тогда путь к текущему выбранному элементу (ам) Finder будет передан как $1 (...).

В вашем сценарии оболочки, вам нужно изменить (cd "$1") в переданную папку, чтобы выполнить команду слияния в нужном месте.

Я предлагаю вам сделать свой сценарий оболочки более надежным, чтобы (а) передавалась только папка (как в настоящее время выбрано в Finder) и (б) только один элемент:

# Make sure that a _single folder_ is currently selected in Finder; exit otherwise.
[[ $# -eq 1 && -d "$1" ]] || 
  { osascript -e 'display alert "Please select a single folder."'; exit 1; }

# Change to the folder.
cd "$1" || exit

# Perform the merge command.
cat *.txt >merged.csv
Другие вопросы по тегам