(Applescript) Переименовать и переместить / организовать файлы в подпапках

Изменить: я уже создал подпапки заранее с помощью Automator.

Я дизайнер, который в настоящее время разрабатывает для Android. Я использую Sketch App для экспорта всех своих активов, чтобы они имели эквивалентные суффиксы (например, -xxxhdpi, -xxhdpi, -xhdpi, -hdpi, -mdpi).

пример файлов: см. скриншот

пример папок: см. скриншот

Я пытаюсь переместить все эти ресурсы в подпапки (/xxxhdpi, /xxhdpi и т. Д.) И обрезать их суффиксы.

Обладая нулевыми знаниями в программировании / программировании, я попытался использовать Automator. Но я наткнулся на его ограничение для относительных путей. После поиска большого количества ресурсов (включая " Поиск приложения", чтобы найти файлы и переместить их в другую папку, и " Приложения": создание папок / подпапок и перемещение нескольких файлов). Это немного сбивает с толку, потому что я не могу понять, что делают эти строки. Но я придумал это

tell application "Finder"

    set assetsFolder to (target of front Finder window) as text
    do shell script "cd " & (quoted form of POSIX path of assetsFolder) & "; "
    set selectedItems to selection

    repeat with this_item in selectedItems
        if this_item's name contains "-xxxhdpi" then
            set the theName to this_item's name
            set the theSource to "-xxxhdpi"
            set the theReplacement to ""
            move this_item to folder "xxxhdpi" of folder assetsFolder
            set name of this_item to my replace(theName, theSource, theReplacement)
        end if
    end repeat

end tell

on replace(theString, theSource, theReplacement)
    set AppleScript's text item delimiters to theSource
    set theItems to every text item of theString
    set AppleScript's text item delimiters to theReplacement
    return theItems as Unicode text
end replace

Я понимаю, что это работает только для случая "xxxhdpi", потому что я хочу сначала проверить это. Позднее я хотел бы, чтобы в этом сценарии использовались другие случаи для применения остальных суффиксов (извините, если мой английский плохой).

Сам скрипт отлично работает для переименования и перемещения. Но я не могу заставить их работать вместе.

Прямо сейчас проблема в этих двух строках:

set name of this_item to my replace(theName, theSource, theReplacement)
move this_item to folder "xxxhdpi" of folder assetsFolder

Либо файлы переименовываются, но не могут быть перемещены, либо файлы перемещаются, но не могут быть переименованы.

Кроме того, я пытался найти плагины для этой цели (организация ресурсов Android), но мне не повезло. Либо я получил помощь для написания этого кода, либо кто-то подскажет мне эквивалентный плагин, который сделает эту работу.

заранее спасибо

1 ответ

Решение

Попробуйте, сценарий предполагает, что имя подпапки всегда является частью между (последним) дефисом и точкой перед расширением имени, и в имени файла всегда есть хотя бы один дефис.

Скрипт использует интерфейс командной строки ditto который может создавать промежуточные каталоги на лету. Он отделяет имя и расширение каждого выбранного файла и удаляет имя подпапки из имени файла. Нет необходимости создавать подпапки "вручную".

tell application "Finder"
    set selectedItems to selection
    if selectedItems is {} then return
    set parentFolder to POSIX path of (container of item 1 of selectedItems as text)
end tell

set {TID, text item delimiters} to {text item delimiters, "-"}
repeat with anItem in selectedItems
    set {fileName, fileExtension} to splitNameExtension(anItem)
    tell text items of fileName to set {prefix, suffix} to {items 1 thru -2 as text, item -1}
    set newFilePath to quoted form of (parentFolder & suffix & "/" & prefix & fileExtension)
    set sourceFile to quoted form of POSIX path of (anItem as text)
    do shell script "/usr/bin/ditto " & sourceFile & space & newFilePath & "; /bin/rm " & sourceFile
end repeat
set text item delimiters to TID

on splitNameExtension(aFile)
    set {name:fileName, name extension:fileExtension} to aFile
    if fileExtension is missing value then return {fileName, ""}
    return {text 1 thru ((count fileName) - (count fileExtension) - 1) of fileName, "." & fileExtension}
end splitNameExtension
Другие вопросы по тегам