Как передать переменную из Automator в Shell Script, чтобы создать родительский каталог.

Я пытаюсь автоматизировать файлы с переименованием и сортировкой на основе проекта. Мне удалось получить то, что я хотел, по сути, но я хочу сделать шаг вперед. В Automator я запрашиваю текст, затем устанавливаю значение переменной и называю ее "MovieTitle". Затем следующее действие переименовывает элементы поиска, заменяя "XXXX" на переменную "MovieTitle" первая часть действий автоматизатора

Затем я запускаю скрипт оболочки, который создает 4 папки, а затем сортирует файлы по этим папкам:

`for f in "$@" do mkdir -p "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Amazon" mkdir -p "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/iTunes" mkdir -p "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Microsoft" mkdir -p "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Google Play"

done`

Это действительно работает и делает то, что мне нужно, хотя я уверен, что code можно было бы улучшить/сделать более эффективным. Моя главная цель — создать родительский каталог, который является переменной "MovieTitle", и сделать эти 4 папки подпапками этого родителя. И также по-прежнему сортировать файлы по этим конкретным папкам.

Я попробовал несколько разных вещей, которые я прочитал в Интернете, и даже с Chat GPT, и ничего, похоже, не сработало. Для тестирования я просто добавил новую строку в начале скрипта mkdir -p "$MovieTitle". Я пробовал разные варианты этого, но новая папка так и не была добавлена. Только 4 с абсолютными путями.

Буду признателен за любую помощь.

if [[ $f == *"Amazon"* ]]
then
    mv $f "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Amazon"
fi

if [[ $f == *"Google"* ]]
then
    mv $f "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Google Play"
fi
    
if [[ $f == *"Microsoft"* ]]
then
    mv $f "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/Microsoft"
fi

if [[ $f == *"iTunes"* ]] || [[ $f == *"_#"* ]]
then
    mv $f "/Users/kgstudio/Documents/• Designworks •/• VOD Automation •/Kaleidoscope/3. VOD/iTunes"
fi
Никодим
Вопрос задан23 января 2024 г.

1 Ответ

2

Передача переменной из Automator в Shell Script для создания родительского каталога

Передача переменной из Automator в Shell Script для создания родительского каталога - это задача, требующая знания работы с оболочкой и инструментов Automator. В этом ответе мы рассмотрим несколько способов решения этой проблемы.

1. Использование переменных окружения

Automator может передавать переменные в Shell Script через переменные окружения. Переменные окружения доступны в Shell Script через префикс `$`.

Пример кода:

Automator:

# В качестве примера, мы передаем имя папки в переменную "FOLDER_NAME"
echo "FOLDER_NAME=$FOLDER_NAME" > /tmp/env.sh
# Запускаем Shell Script
/bin/bash /path/to/script.sh

Shell Script (script.sh):

#!/bin/bash

# Получение значения переменной
FOLDER_NAME=$FOLDER_NAME

# Создание родительского каталога
mkdir -p "${FOLDER_NAME%/*}"

echo "Родительский каталог \"${FOLDER_NAME%/*}\" успешно создан!"

Таблица переменных окружения:

Переменная окруженияЗначение
FOLDER_NAMEИмя папки

Преимущества метода:

  • Простой и понятный способ передачи данных.
  • Не требует дополнительных настроек.

Недостатки метода:

  • Ограниченное количество переменных, которые можно передать.
  • Переменные доступны только в Shell Script.

2. Использование аргументов командной строки

Shell Script может принимать аргументы командной строки, которые передаются из Automator.

Пример кода:

Automator:

# Передача имени папки в качестве аргумента
/bin/bash /path/to/script.sh "$FOLDER_NAME"

Shell Script (script.sh):

#!/bin/bash

# Получение аргумента
FOLDER_NAME=$1

# Создание родительского каталога
mkdir -p "${FOLDER_NAME%/*}"

echo "Родительский каталог \"${FOLDER_NAME%/*}\" успешно создан!"

Преимущества метода:

  • Более гибкий способ передачи данных.
  • Можно передать несколько аргументов.

Недостатки метода:

  • Необходимо знать порядок аргументов.
  • Не подходит для передачи большого количества данных.

3. Использование временных файлов

Automator может создавать временные файлы, которые затем читаются Shell Script.

Пример кода:

Automator:

# Запись имени папки в файл
echo "$FOLDER_NAME" > /tmp/folder_name.txt
# Запускаем Shell Script
/bin/bash /path/to/script.sh

Shell Script (script.sh):

#!/bin/bash

# Чтение имени папки из файла
FOLDER_NAME=$(cat /tmp/folder_name.txt)

# Создание родительского каталога
mkdir -p "${FOLDER_NAME%/*}"

echo "Родительский каталог \"${FOLDER_NAME%/*}\" успешно создан!"

Преимущества метода:

  • Подходит для передачи больших объемов данных.
  • Можно передавать разные типы данных.

Недостатки метода:

  • Требует дополнительного шага по созданию и удалению временных файлов.
  • Может быть более сложным для понимания.

4. Использование `osascript`

Automator может использовать `osascript` для передачи данных в Shell Script.

Пример кода:

Automator:

# Передача имени папки в Shell Script через `osascript`
osascript -e 'display dialog "Введите имя папки" default answer ""' -e 'set theFolderName to text returned of result' -e 'do shell script "echo \"FOLDER_NAME=$theFolderName\" > /tmp/env.sh; /bin/bash /path/to/script.sh"'

Shell Script (script.sh):

#!/bin/bash

# Получение значения переменной
FOLDER_NAME=$FOLDER_NAME

# Создание родительского каталога
mkdir -p "${FOLDER_NAME%/*}"

echo "Родительский каталог \"${FOLDER_NAME%/*}\" успешно создан!"

Преимущества метода:

  • Подходит для передачи данных различного типа.
  • Можно использовать диалоговые окна для взаимодействия с пользователем.

Недостатки метода:

  • Может быть более сложным в реализации.
  • Требует знания AppleScript.

Вы можете выбрать метод, который подходит для вашей задачи и уровня сложности. Не забудьте удалить временные файлы после завершения работы скрипта. Важно помнить, что безопасность всегда должна быть приоритетом при работе с Shell Script.

Филимон
Ответ получен15 сентября 2024 г.

Ваш ответ

Загрузить файл.