Используйте Automator и AppleScript для перемещения файлов в папки на основе имени файла

StackOverflow https://stackoverflow.com/questions/3875650

  •  28-09-2019
  •  | 
  •  

Вопрос

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

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, если я должен смотреть на

Это было полезно?

Решение

Это легко, это просто не очевидно. Некоторые вещи, чтобы вы начали.

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

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, поэтому пункт 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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top