Applescript: создание папок / подпапок и перемещение нескольких файлов

У меня есть вопрос по Applescript, который намного сложнее, чем я могу построить. Я искал последние пару дней, и я не могу найти ни одного подобного сценария, а также не могу найти достаточно информации, чтобы соединить один со своими ограниченными знаниями.

У меня есть несколько файлов со структурированными именами. Каждый файл имеет следующую структуру имен:

ttu_collectionname_000001.pdf
ttu_collectionname_000002.mp3
ttu_collectionname_000003.pdf... и т. д. (Каждый из этих файлов имеет разные типы файлов.)

Существует также файл метаданных csv, связанный с каждым из исходных файлов.

ttu_collectionname_000001.csv
ttu_collectionname_000002.csv
ttu_collectionname_000003.csv... и т. д. (Каждый из этих файлов является CSV-файлом.)

Мне нужно создать папку на основе имени файла с подпапками и подпапками. Каждое имя папки верхнего уровня будет уникальным в числовой последовательности. Имя каждой подпапки и подпапки будет одинаковым для каждой папки верхнего уровня.

Структура папок должна выглядеть так:

  • ttu_collectionname_000001
    • содержание
      • архив
      • дисплей
    • метаданные
      • архив
      • дисплей
  • ttu_collectionname_000002
    • содержание
      • архив
      • дисплей
    • метаданные
      • архив
      • дисплей

Затем мне нужно переместить каждый файл в определенную подпапку.

Файл ttu_collectionname_000001.pdf будет перемещен в папку ttu_collectionname_000001/content/display.

Файл ttu_collectionname_000001.csv будет перемещен в папку ttu_collectionname_000001/metadata/display.

2 ответа

Решение

Пытаться:

set myFolder to "Mac OS X:Users:stark:Main Folder"
tell application "Finder" to set myFiles to folder myFolder's files as alias list
repeat with aFile in myFiles
    tell application "System Events" to set {fileName, fileExt} to {name, name extension} of aFile
    set baseName to text 1 thru ((get offset of "." & fileExt in fileName) - 1) of fileName
    do shell script "mkdir -p " & (quoted form of (POSIX path of myFolder)) & "/" & baseName & "/{\"content\",\"metadata\"}/{\"display\",\"archive\"}"
    tell application "System Events"
        if fileExt is "pdf" then move aFile to (myFolder & ":" & baseName & ":content:display" as text)
        if fileExt is "csv" then move aFile to (myFolder & ":" & baseName & ":metadata:display" as text)
    end tell
end repeat

Предполагая, что ваши файлы находятся в одной папке, до

этот AppleScript:

set pathToFolderOfTTUFiles to (path to the desktop as text) & "TTU:"
tell application "Finder"
    set theFiles to every item of folder pathToFolderOfTTUFiles whose name extension is not "csv" and kind is not "Folder"
    repeat with theFile in theFiles
        set lengthOfExtension to (length of (theFile's name extension as text)) + 1
        set fileNameWithoutExtension to text 1 through -(lengthOfExtension + 1) of (theFile's name as text)
        set theFolder to make new folder at folder pathToFolderOfTTUFiles with properties {name:fileNameWithoutExtension}

        set theContentFolder to make new folder at theFolder with properties {name:"content"}
        make new folder at theContentFolder with properties {name:"archive"}
        set theContentDisplayFolder to make new folder at theContentFolder with properties {name:"display"}
        set theMetadataFolder to make new folder at theFolder with properties {name:"metadata"}
        make new folder at theMetadataFolder with properties {name:"archive"}
        set theMetadataDisplayFolder to make new folder at theMetadataFolder with properties {name:"display"}

        move theFile to theContentDisplayFolder
        set pathToCSV to pathToFolderOfTTUFiles & fileNameWithoutExtension & ".csv"
        if exists pathToCSV then move pathToCSV to theMetadataDisplayFolder
    end repeat
end tell

создает это:после

Другие вопросы по тегам