Используйте Automator и AppleScript для перемещения файлов в папки на основе имени файла
-
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
Я предлагаю сначала создать список всех целевых файлов, а затем для каждого файла в списке создавайте папки на основе его имени, переместите файл, наконец, переименовая его после его окончательного местоположения.
Добавить соль по вкусу.