AppleScript зависает в Finder с помощью простого чьего запроса

Я попытался закодировать очень простую службу Automator для выбора всех файлов с тем же расширением, что и файл, выделенный в данный момент. Он вызывает сценарий Applescript, который я написал так (на самом деле вдохновленный некоторым кодом, найденным здесь):

on run {input, parameters}
    try
        set anItem to first item of input
        tell (info for anItem) to set theExt to name extension
        tell application "Finder"
            set parentFolder to (parent of anItem as alias)
            select (every document file of parentFolder whose (name extension is theExt))
        end tell
    end try
end run

Он отлично работает до строки «выбрать ...» с соответствующими переменными parentFolder и theExt. Тогда я получаю пляжный мяч. Finder застрял на 100% на целую вечность, я должен убить его и перезапустить.

РЕДАКТИРОВАТЬ: я только что понял, что на самом деле все работает нормально, если папка содержит несколько десятков элементов. Он зависает (даже разрешено работать в течение часов) в большой папке, содержащей около 10000 элементов (очевидно, вы пишете такой код при работе с большим количеством файлов...).


person Pedrok    schedule 10.04.2018    source источник


Ответы (1)


Finder работает ужасно медленно при фильтрации элементов с предложением where.

Это альтернатива использованию System Events, которая намного быстрее

on run {input, parameters}
    try
        set anItem to first item of input
        tell application "System Events"
            set theExt to name extension of anItem
            set parentFolder to path of container of anItem
            set itemsToSelect to (path of files of folder parentFolder whose name extension is theExt)
        end tell
        tell application "Finder"
            open parentFolder
            select itemsToSelect
        end tell
    end try
end run

Примечание. info for уже давно устарело. Предпочтительнее получать информацию напрямую от System Events.

person vadian    schedule 10.04.2018
comment
Это было быстро, и ответ, и код! Теперь это нормально для моих нужд. Большое спасибо. - person Pedrok; 10.04.2018