Используйте Automator и Applescript для перемещения файлов в папки на основе имени файла - PullRequest
0 голосов
/ 06 октября 2010

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

Elephant.19864.archive.other.pdf
Elephant.17334.other.something.pdf
Turnip.19864.something.knight.pdf
Camera.22378.nothing.elf.pdf

Я хочу, чтобы эти файлы были перемещены в следующую структуру

Archive
    Elephant
        Elephant.19864.pdf
        Elephant.17334.pdf
    Turnip
        Turnip.19864.pdf
    Camera.HighRes
        Camera.HighRes.22378.pdf

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

Если папка не существует, я должен ее создать.

Я думал, что это было бы довольно просто с использованием Automator или AppleScript, но я, похоже, не смогу обойти это.

Легко ли использовать Automator / AppleScript, если да, на что мне обратить внимание

1 Ответ

3 голосов
/ 06 октября 2010

Это просто, поначалу это не очевидно. Некоторые вещи, с которых можно начать.

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

set AppleScript's text item delimiters to {"."}
set fileNameComponents to (every text item in fileName) as list
set AppleScript's text item delimiters to oldDelims
--> returns: {"Elephant", "19864", "archive", "other", "pdf"}

Список имеет индекс на основе 1, поэтому пункт 1 - «Слон», пункт 5 - «pdf». Чтобы смешать имя файла вместе, все, что вам нужно, это

set theFileName to (item 1 of fileNameComponents & item 2 of fileNameComponents & item 5 of fileNameComponents) as string

Чтобы создать папку, просто используйте следующее ...

tell application "Finder"
    set theNewFolder to make new folder at (theTargetFolder as alias) with properties {name:newFolderName, owner privileges:read write, group privileges:read write, everyones privileges:read write}
end tell

Чтобы переместить файл, все, что вам нужно, это ...

tell application "Finder"
    set fileMoved to move theTargetFile to theTargetFolder
end tell

Чтобы переименовать файл, используйте что-то вроде следующего ...

set theFileToRename to theTargetFilePath as alias -- alias is important here
set name of theFileToRename to theFileName

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

Добавить соль по вкусу.

...