Як створити службу "Автоматизатор" для запуску сценарію для всіх файлів у папці


2

Я хочу створити сервіс за допомогою Automator, щоб запустити скрипт оболонки на всі файли в папці, скажімо, видалити всі файли журналу. Що я зробив, так і є

  1. Створено нову послугу в автоматизаторі.
  2. Додано дію "Запустити сценарій оболонки". Я зараз змінив це на 'pwd'.
  3. Вибране "Сервіс отримує вибрані папки".
  4. Спробував запустити його, але отримайте повідомлення. "Щоб перевірити цю послугу в Automator, додайте дію" Отримати вказані елементи пошуку "на початку вашого робочого процесу. Видаліть або відключіть дію перед запуском робочого процесу за межами Automator.
  5. В ПОРЯДКУ. Тому я додаю "Отримати вказані елементи пошуку". До списку елементів додано каталог "тестування".

Тепер, коли я запускаю скрипт, вікно результатів друкує мою домашню директорію.

В іншому місці я прочитав, що, можливо, мені потрібно додати

cd "$1"

до початку мого сценарію. Я це зробив, але він все ще друкує домашній каталог. Як змусити цю річ надрукувати каталог, який я вибрав у розділі "Отримати вказані елементи пошуку?"

Відредаговано, щоб додати

Ось знімок екрана сценарію, який працює.

тест

Ось знімок екрана зі сценарієм, який не працює.

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

Звичайним способом я мав би справу з помилкою "не знайдено відповідності: * .log" - перенаправити вихідну помилку на нуль. Заміна рядка "rm" на

find . -name "*.log" -print0 | xargs -0 rm -rf

Працює, хоча. Це здається складніше, ніж має бути.


Я оновив свою відповідь, щоб показати вам робочий приклад, подивіться і повідомте мені, якщо у вас є питання.
користувач3439894

Відповіді:


3

Якщо ви створюєте службу , використовуючи RunShell скрипт , який ви хочете передати обрану папку (и) до RunShell Script і мати додаткові дії відбуваються в сценарії на них, а потім почати з цими настройками.

Створіть послугу:

  1. Відкрийте Automator і виберіть Сервіс або Файл > Створити > Сервіс, якщо Автоматизатор вже відкритий.

  2. Встановіть Service отримує обрану для папок і в до Finder .

  3. Додавання сценарію Run Shell Action , установка Shell: в / bin / Баша і Пасс введення: в
    якості аргументів . Це змінює код за замовчуванням на з cat:

    for f in "$@"
    do
        echo "$f"
    done
    

Тепер ви можете використовуватись $fдля дії з цільовими папками , наприклад, cd $fзараз ви знаходитесь в каталозі $fта можете додавати додатковий код для дії на файли / папки в межах $fтощо

Оновлення:

Використовуйте наступний робочий код як приклад:

for d in "$@"; do
    cd "$d"
    for f in *.log; do    
        rm "$f"
    done
done

У папках копій тестування та тестування було декілька файлів .log та файли з іншими розширеннями. Коли запускався вищевказаний код, він видаляв лише файли * .log із цільових папок, як показано на зображеннях нижче, використовуючи дві папки або одну папку, а також файли та папки з пробілами / без їх назв.


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


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


1
Дякую. Це працює. Біт, який мені бракував, був "Передати введення: як аргументи". Однак, коли я додаю рядки cd $ 1, rm * .log 2> / dev / null не вдається з помилкою "Запуск сценарію оболонки не вдалося - 1 помилка" і більше нічого просвічуючого.
феон

@pheon, Спроба усунути чийсь код без належного mcve складно. Також при використанні сценарію запуску оболонки не повинно бути необхідності використовувати перенаправлення на зразок 2>/dev/null. Якщо ви намагаєтесь, щоб cdпапка, передана до служби автоматизатора, вам слід скористатися forциклом і cd $f`` as I said, not cd $ 1`. Прочитайте mcve та додайте додаткову інформацію до свого питання, щоб увімкнути правильне усунення несправностей, інакше я не дуже багато можу зробити. Вам також потрібно додати скріншот коду, який використовується, як він написаний у вашій службі автоматизації.
користувач3439894

Для мене це не вдається, якщо в папці немає .log файлів.
феон

@pheon. Будь ласка, розумійте, що наданий код є прикладом / зразком коду і часто мінімальний, щоб показати, що щось може працювати. Наголос робиться на користувача , щоб написати відповідну помилку перевірки коду та реалізації. Я перегляну це десь у ці вихідні та модифікую / додаю перевірку помилок до наявного прикладу / зразкового коду .
користувач3439894

Я ціную, що це складніше, ніж я думав спочатку. Я визнаю, я думав, що це буде легко. Я використовував це як вправу при вивченні автоматизатора. Розчаровує те, що скрипт bash shell, який працює з терміналу, не перекладається безпосередньо в автоматизатор, а автоматизатор не дає корисних діагностичних повідомлень, коли цей сценарій не працює. Спасибі за вашу допомогу. Звідси вирішити проблему потрібно лише в тому випадку, якщо вам подобається головоломка; Я знайду роботу навколо, використовуючи сценарій bash за призначенням.
феон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.