(Automator / AppleScript) Переименуйте файлы в имя папки, сохраните в другую папку и добавьте префикс

Мне очень нужна твоя помощь, и я буду за нее очень благодарен. Думаю, для вас это не должно быть проблемой.

Итак, у меня есть папка с разными подпапками. Во вложенных папках находятся изображения. Что мне нужно:

  1. Измените имя каждого изображения на имя подпапки + 001 и так далее («1stSubfolder001, 1stSubfolder002,…», «2ndSubfolder001, 2ndSubfolder002,…»)
  2. Переместите все изображения из всех подпапок в одну папку (или хотя бы в корневую папку)
  3. Добавляйте случайные номера префиксов к именам.

У меня есть сценарий для третьей задачи:

tell application "Finder" 
    repeat with this_item in (get items of window 1)
        set name of this_item to ((random number from 0 to 99999) & name of this_item) as string
    end repeat 
end tell

Но работает только с открытой папкой на переднем плане. Может есть способ заставить один скрипт запускать его в фоновом режиме?

Заранее огромное спасибо.

Я нашел здесь классное приложение-автомат, но мне нужно его немного поправить. Как использовать текущее имя папки без пути в качестве переменной в автомате на Mac?

Этот скрипт делает все, что мне нужно, НО он переименовывает все файлы в ОДНО имя папки, а не в разные.

Вот еще один applescript, который переименовывает файлы в папки, но использует имя 2 папок (папка + подпапка), и мне нужен только префикс подпапки.

set myFolder to do shell script "sed 's/\\/$//' <<< " & quoted form of POSIX path of (choose folder)
set myFiles to paragraphs of (do shell script "find " & quoted form of myFolder & " \\! -name \".*\" -type f -maxdepth 2 -mindepth 2")
repeat with aFile in myFiles
    tell application "System Events" to set file aFile's name to (do shell script "sed 's/.*\\/\\([^/]*\\)\\/\\([^/]*\\)\\/\\([^/]*$\\)/\\1_\\2_\\3/' <<< " & quoted form of aFile)
end repeat  

(MacBook Pro, конец 2013 г., OS X Yosemite 10.10.1)


person Vassili Bagrov    schedule 18.12.2014    source источник


Ответы (1)


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

property top_folder : alias "Macintosh HD:Users:MyName:Downloads:Images:"
property save_folder : ""

set save_folder to choose folder with prompt "Select the folder to save the images in."
process_folder(top_folder)

on process_folder(this_folder)
    set these_items to list folder this_folder without invisibles
    set container_name to name of (info for this_folder)
    repeat with i from 1 to the count of these_items
        set this_item to alias ((this_folder as Unicode text) & (item i of these_items))
        if folder of (info for this_item) is true then
            process_folder(this_item)
        else
            process_item(this_item, container_name, i)
        end if
    end repeat
end process_folder

-- this sub-routine processes files 
on process_item(this_item, c, i)
    -- make the integer a 3 digit string
    if i < 10 then
        set i to "00" & i
    else if i < 100 then
        set i to "0" & i
    end if
    -- set a random number
    set r to (random number from 0 to 99999) as string

    tell application "System Events"
        -- get file extension so not overwritten
        set e to name extension of this_item
        set new_name to "" & r & "_" & c & "_" & i & "." & e
        set name of this_item to new_name
        move this_item to save_folder
    end tell
end process_item
person jweaks    schedule 18.12.2014
comment
УХ ТЫ! Это просто потрясающе !!! Однако две вещи: 1. Есть ли способ выбрать путь, по которому переместить все переименованные файлы? Например, мне нужно, чтобы он переместился в / users /… / Downloads / Images, как мне заставить его работать? 2. как сделать постоянным первый путь к основной папке с подпапками? То есть не объявлять каждый раз путь. - person Vassili Bagrov; 19.12.2014
comment
Я редактировал сценарий. Теперь он запрашивает место сохранения и имеет жестко запрограммированное свойство для верхнего уровня папки, которое вы можете установить в сценарии. (Ваши последние вопросы - это ОЧЕНЬ базовый Applescript, поэтому вам действительно стоит узнать больше, прочитав книги / примеры, прежде чем задавать все здесь.) - person jweaks; 19.12.2014