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