#macos #applescript #automator
#macos #applescript #automator
Вопрос:
Желая оптимизировать свой рабочий процесс с фотографией, я хочу автоматизировать перемещение изображений и видео из (а) основной папки в набор вложенных папок на основе начала имени файла — все на основе года и месяца, т.Е. ГГГГ-ММ. В идеале, он должен запускаться каждый раз, когда новый файл появляется в определенной основной папке / a, но если это сделать непросто, я был бы не против иметь droplet / app, который я должен либо запускать вручную, либо иным образом запланировать для запуска.
Я не программист и не пишу сценарии, но я могу понять большинство вещей, когда есть очевидная логика для непрофессионала. Я прочитал множество похожих сообщений, но ни один из них не дает очевидного ответа, который я могу использовать и / или выяснить, как адаптироваться к тому, что я пытаюсь сделать со своими файлами и иерархией папок. Из того, что я вижу, как люди делают это на Applescript или других языках сценариев (?), Для нужного человека, я думаю / надеюсь, это простой вопрос.
У меня нет хорошего способа объяснить, что я пытаюсь сделать, кроме как визуально, так что здесь. Дайте мне знать, если у вас возникнут какие-либо вопросы. Спасибо!
Ответ №1:
Для этого я бы использовал действие папки Automator с действием запуска сценария оболочки с настройками, как показано на рисунке ниже, заменив код по умолчанию в действии запуска сценария оболочки следующим примером кода сценария оболочки :
p="$HOME/Photos"
for f in "$@"; do
[ -f "${f}" ] || continue
fn="${f##*/}"
[[ ${fn} =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}.* ]] || continue
y="${fn:0:4}"
m="${fn:5:2}"
mkdir -p "${p}/${y}/${y}-${m}/${y}-${m} - To Sort" || exit
mv -n "${f}" "${p}/${y}/${y}-${m}/${y}-${m} - To Sort"
done
Чтобы протестировать пример кода сценария оболочки , я создал фотографии и Фотографии для сортировки папок в моей домашней папке и назначил позже действию папки в моем рабочем процессе Automator .
Начиная без каких-либо вложенных папок в папке «Фотографии » или файлов в папке «Фотографии для сортировки «, я перетащил следующие файлы в папку «Фотографии для сортировки «:
- 2020-12-31 — file.jpg
- 2021-01-12 — file.mp4
- 2021-01-16 — file.jpg
- 2021-02-24 — file.jpg
- 2021-03-25 — file.mov
При выполнении этого действия вызывается действие папки Automator , перемещающее файлы в соответствующую иерархическую структуру папок, как показано ниже:
Photos % tree
.
├── 2020
│ └── 2020-12
│ └── 2020-12 - To Sort
│ └── 2020-12-31 - file.jpg
└── 2021
├── 2021-01
│ └── 2021-01 - To Sort
│ ├── 2021-01-12 - file.mp4
│ └── 2021-01-16 - file.jpg
├── 2021-02
│ └── 2021-02 - To Sort
│ └── 2021-02-24 - file.jpg
└── 2021-03
└── 2021-03 - To Sort
└── 2021-03-25 - file.mov
10 directories, 5 files
Photos %
Примечания:
В этом конкретном случае использования IMO гораздо проще написать код сценария оболочки, чем код AppleScript , и именно поэтому я пошел по этому пути.
Закодированная mv
команда не перезапишет существующий файл из-за этой -n
опции. Если вы хотите, чтобы существующие файлы были перезаписаны, удалите эту -n
опцию из mv
команды.
Сценарий оболочки проверяет, что было удалено в папку, назначенную действию папки, является файлом, или переходит к следующему удаленному элементу Finder , если было удалено более одного.
Он проверяет, что имя файла находится в формате, например, ГГГГ-ММ-ДД …, или переходит к следующему удаленному элементу Finder , если было удалено более одного.
Создает иерархические структуры папок назначения по мере необходимости, а затем перемещает целевые файлы в соответствующие папки назначения.
tree
Команда, используемая для отображения содержимого папки Photos , не является командой macOS по умолчанию.
Номенклатура переменных сценария оболочки:
- f = полный путь
- fn = имя файла с расширением
- y = год
- m = месяц