Как автоматизировать переименование файла на основе его родительской папки?

Я провел много исследований и не могу найти простого решения для переименования файла в его родительской папке.

По сути, я архивирую кучу файлов из онлайн-файлового менеджера и получаю их в нелепой структуре. (см. ниже) первый столбец - это извлеченная родительская папка, которая называет себя после последней папки в наборе, когда я ее заархивирую. Второй столбец - это фактические номера заказов для каждого заказа. Третий столбец — это папки со случайными именами, каждая из которых содержит ОДИН файл, загруженный клиентом. Таким образом, каждый файл, который клиент загружает для заказа, помещается в папку со случайным именем, а затем в папку с номером заказа.

текущая структура

Я хотел бы создать приложение или службу с Apple Automator, чтобы переименовать файлы клиентов таким образом (и избавиться от всех подпапок), оставив их все в родительской папке с именем последовательно.

3587915_1.PDF
3587915_2.PDF
3587915_3.PDF
3587915_4.PDF
3587933_1.PDF
3587933_2.PDF

любая помощь/понимание?

Являются ли каталоги Order# и SomeAutomatedFilename каталогами? Можете ли вы опубликовать вывод образца ZIP с помощью unzip -l download.zip ... ура

Ответы (1)

Вы можете сделать это с помощью AppleScript. Используйте редактор сценариев в папке «Утилиты». Вот сценарий, который я написал для вас только что. Он работает с одной папкой за раз - не с папкой верхнего уровня, а с той, что в вашем примере, 3587915.

Когда вы запускаете этот скрипт, он просит вас выбрать папку. В этом примере вы должны открыть 3587915 и нажать «Выбрать». Очень важно: не выбирайте свой 3589919. Здесь мы работаем только с одной папкой. Если это сработает для вас, мы можем перейти к циклическому просмотру папок в папке верхнего уровня.

tell application "Finder"
    set the_folder to choose folder
    set the_folder_name to name of the_folder
    set the_subfolders to every folder in the_folder
    repeat with I from 1 to count of the_subfolders
        set name of every file of item I of the_subfolders to the_folder_name & "_" & I & ".pdf"
        move every file of item I of the_subfolders to the_folder
    end repeat
    --
    -- optionally delete the subfolders
    delete every folder in the_folder -- put two dashes in front of this line to comment it out
end tell

Вот скриншоты, показывающие, как это работает. Вам следует потренироваться на наборе папок, которые сначала не имеют значения. Вы можете увидеть мою начальную установку на первом изображении и результат на втором. Подписи к картинкам не отображаются (у меня), так что вот какие они должны быть:

Рисунок 1: Служба Automator с немного измененным AppleScript.

Рисунок 2: папка_1, папка_2, папка_3, папка_4 и папка_5 содержат по одному PDF-файлу. Здесь показано только содержимое папки_1.

Изображение 3: Это результат. Подпапки исчезли. Файлы названы в честь родительской папки.

Вы можете сохранить скрипт как приложение. Или вы можете запустить скрипт на шаге в Automator, поскольку Automator может запускать AppleScript. Это в разделе «Утилиты» Automator «Запустить AppleScript». Я бы включил изображение, но я здесь новенький, и мне разрешено только два изображения, пока я не обновлюсь.

Если вы хотите сделать это со службой, вы используете почти тот же скрипт, но вы должны передать папку, на которую нажали. Вместо того, чтобы использовать шаг AppleScript «Выбрать папку», вы указываете службе Automator «получить выбранную папку в Finder» и устанавливаете «the_folder» в элемент 1 ввода. Смотрите первую картинку. Работает как чемпион здесь!

Служба Automator, передавая папку, на которую нажат элемент управления

папка_1, папка_2, папка_3, папка_4 и папка_5 содержат по одному PDF-файлу.  Здесь показано содержимое только папки_1

Это результат.  Подпапки исчезли.  Файлы названы в честь родительской папки.

Большое спасибо, Кристиан, это определенно работает и избавляет от головной боли. Можно ли сделать это дроплетом или службой таким образом, чтобы мне не нужно было выбирать папку, но она применялась к любой папке (папкам), на которую я нажимаю клавишу CTRL?
Бекки, пожалуйста. Я отредактировал свой исходный пост, чтобы показать метод службы Automator. Спасибо моему другу Бену Уолди за то, что напомнил мне, как передать папку в AppleScript. Создайте эту службу в Automator, и она будет доступна вам в любое время, когда вы щелкнете папку, удерживая клавишу Control.
Аккуратный! Я бы сделал это с помощью сценария оболочки. (:
@SilverWolf, я собирался опубликовать эквивалент сценария оболочки, когда увидел ваш комментарий. Итак, если вы хотите опубликовать это как ответ, я отложу.