Как мне заставить 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.