Applescript ужасно медленный Finder.app Установить комментарий

Applescript ужасно медленный Finder.app Установить комментарий

Вот сценарий:

set d to do shell script "date +%d-%m-%Y"
tell application "Finder"
    set dir to POSIX file ("/Volumes/Xsan/PathTo/Folder") as alias
    repeat with f in entire contents of dir
        if comment of f does not start with "Archived" then
            set comment of f to "Archived " & d
            set label index of f to 2
        end if
    end repeat
end tell

Проблема в том, что я запускаю это в папке с 1000 изображений и папок. Finder загружает процессор примерно на 90%, и на установку комментария и метки для КАЖДОГО ФАЙЛА/ПАПКИ уходит около 40 секунд.

Есть ли какая-то оптимизация, которую кто-нибудь может предложить. Или, в качестве альтернативы, изменение кода, которое позволит реализовать эту задачу на 100% с помощью скрипта Bash? (Если это поможет со скоростью).

Мне кажется, что в команде «все содержимое» есть что-то, что все портит.

Как и перед тем, как внести изменения в указанный файл или папку, он снова проверяет наличие тегов "Архивировано" на ВСЕХ файлах после внесения одного изменения. Я думал, что это будет кэшироваться в памяти в начале.

Буду рад любым вашим идеям!

Ваше здоровье,

Джеймс

правка: Система - Snow Leopard Server 10.6.8, Xserve2,1

решение1

Попробуй это:

    set time1 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"

set d to do shell script "date +%d-%m-%Y"    
    tell application "Finder"
        set dir to POSIX file "/Volumes/Xsan/PathTo/Folder" as alias
        set eContents to entire contents of dir
        repeat with f in my eContents
            if comment of f does not start with "Archived" then
                set comment of f to "Archived " & d
                set label index of f to 2
            end if
        end repeat
    end tell

    set time2 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"
    set millisec to (round ((time2 - time1) * 1000))

или

set time1 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"

set d to do shell script "date +%d-%m-%Y"
tell application "Finder"
    set dir to POSIX file "/Volumes/Xsan/PathTo/Folder" as alias
    set eContents to every file of (entire contents of dir) whose comment does not start with "Archived"
    repeat with f in my eContents
        set comment of f to "Archived " & d
        set label index of f to 2
    end repeat
end tell

set time2 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"
set millisec to (round ((time2 - time1) * 1000))

Связанный контент