2016-03-17 3 views
0

Редактирование: я уже создал подпапки заранее, используя автомат.(Applescript) Переименование и перемещение/упорядочивание файлов в подпапках

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

пример файлов: see the screenshot

пример папок: see the screenshot

То, что я пытаюсь сделать, это переместить все эти активы вложенные папки (/ xxxhdpi,/xxhdpi и т.д.) и обрезать их суффиксы.

Имея нулевые знания в программировании/applescripting, я попытался использовать Automator. Но я наткнулся на его ограничение относительных путей. После поиска большого количества ресурсов (включая Looking for an Applescript to find files and move them to different folder и Applescript: Create folders/subfolders and move multiple files). Это сбивает с толку, потому что я не могу понять, что делают эти линии. Но я придумал этот

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), но мне не повезло. Либо я получил помощь для написания этого applescript, либо кто-то скажет мне эквивалентный плагин, который выполнит эту работу.

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

+0

Возможно, ваш сценарий завершился неудачно, потому что папка «xxxhdpi» не существует в папке с ресурсами. поэтому есть 2 решения: 1) легко, вы должны создать все вложенные папки в папке с активами, прежде чем запускать скрипт (подпапки xxxhdpi, xxhdpi, xhdpi, hdpi, mdpi). 2) вы изменяете свой скрипт, чтобы добавить проверку, если вложенная папка выходит и если ее не создает. действительно, вариант 1 очень прост! – pbell

+0

Привет, pbell, благодарю вас за ваш ответ! Я забыл сказать, что я уже создал подпапки. Таким образом, скрипт работает, но только для одного условия (переименование или перемещение). –

ответ

3

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

Сценарий использует интерфейс командной строки 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 
+0

OMG !! Это именно то, чего я хочу достичь!Я просматриваю ваши коды, хотя я не понимаю ни одной вещи :)) Но в любом случае спасибо вам большое! Вы помогли мне сэкономить бесчисленные часы на подготовке активов. Спасибо! –

Смежные вопросы