Перемещение файлов из одной папки в несколько вложенных папок в папках на основе начала имени файла ГГГГ-ММ

#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 = месяц