Как мне заставить automator работать с несколькими папками?

1

У меня есть несколько папок в следующем формате:

Folder_Name_1
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff
Folder_Name_2
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff
  :
  :
Folder_Name_nnn
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff

Я написал скрипт bash, который переместит file1.aiff, file2.aiff и т. Д. На один уровень вверх в Folder_Name_n, а затем удалит «Converted_Files».

Automator будет одновременно работать только с одним Folder_Name_n.

То, что я хочу сделать, это иметь действие automator для Folder_Name_1, затем Folder_Name_2, вплоть до Folder_Name_n.

Вот мой скрипт automator: Автоматизатор потока

Вот скрипт bash в виде текста:

cd "$1"
cd Converted_Files
mv *.aiff ..
rm .DS_Store
cd ..
rm -r Converted_Files

Благодарю.

Тед
источник

Ответы:

-2

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

В следующем примере Automator рабочий процесс был создан File > New > Workflow в Automator с Get Selected Finder Items действия и Run Shell Script действие добавил к нему, с настройками , как показано на изображении ниже дальше.

Тестирование проводилось с помощью выбора , содержащего как файлы и папки , которые включали как реальные цели из Automator рабочих процессов «s Run Shell Script действия , и другие , как будто случайно выбранных , если вы будете. Со следующими файлами и папками, выбранными в Finder :

.
├── Archive.zip
├── Folder_Name_1
├── Folder_Name_2
├── Folder_Name_3
├── Foobar
└── Foobar.txt

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

.
├── Archive.zip
├── Folder_Name_1
│   └── Converted_Files
│       ├── file1.aiff
│       └── file2.aiff
├── Folder_Name_2
│   └── Converted_Files
│       ├── file1.aiff
│       └── file2.aiff
├── Folder_Name_3
│   └── Converted_Files
│       ├── file1.aiff
│       └── file2.aiff
├── Foobar
│   └── Barfoo
│       └── More Foobar.txt
└── Foobar.txt

8 directories, 9 files

После запуска рабочего процесса из Automator для выбранных файлов и папок в Finder ниже показано новое расширенное древовидное представление исходного расширенного древовидного представления выбора :

.
├── Archive.zip
├── Folder_Name_1
│   ├── file1.aiff
│   └── file2.aiff
├── Folder_Name_2
│   ├── file1.aiff
│   └── file2.aiff
├── Folder_Name_3
│   ├── file1.aiff
│   └── file2.aiff
├── Foobar
│   └── Barfoo
│       └── More Foobar.txt
└── Foobar.txt

5 directories, 9 files

Как вы можете видеть на изображении ниже, и в сочетании с информацией , представленной выше, Automator рабочий процесс завершается без ошибок и обрабатываются только соответствующие целевые папки , даже если дополнительные , не являющиеся объектами были отправлены в Run Shell Script действия , как показано выше.

Также отмечу , что дополнительное тестирование было сделано с целевыми папками , на /Folder_Name_N/Converted_Files/которых не .aiffсодержание , чтобы гарантировать , что другие то перемещаемое .aiffсодержание не должно быть явно удалено, например , rm .DS_Storeне была необходимостью, так как -r опция в rm команде будет пытаться удалить иерархии файлов с корнем в каждый аргумент файла . Вы также можете рассмотреть возможность использования этой -f опции . (Я уже добавил его в мой пример bash кода , поэтому удалите его, если вы не хотите использовать эту опцию .)

Automator Workflow Image

Пример bash кода для запуска оболочки сценария действий :

for d in "$@"; do
    [ -d "$d" ] || continue 
    if [ -d "$d/Converted_Files" ]; then
        cd "$d/Converted_Files" || exit 
        for f in *.aiff; do
            mv "$f" ..
        done
    fi
    cd ..
    rm -rf "Converted_Files"
done

Обратите внимание, что пример bash кода является только этим, и может не содержать всю обработку ошибок, которая может быть уместной / необходимой / требуемой. Пользователь всегда должен реализовать любую подходящую / нужную / желаемую обработку ошибок с любым кодом, выбранным для использования.

Тестирование проводилось под macOS High Sierra 10.13.6.

user3439894
источник
Для избирателя было бы выгоднее, если бы вы объяснили причину его отрицательного голосования, чтобы ответ мог быть отредактирован и улучшен с этим знанием.
user3439894