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

問題は、これを何千もの画像とフォルダがあるフォルダで実行していることです。Finder の CPU 使用率は約 90% になり、コメントとラベルを設定するのにファイル/フォルダごとに約 40 秒かかります。

誰か提案できる最適化はありますか。あるいは、このタスクを 100% Bash スクリプトで実装できるようにコードを変更することはできますか? (それが速度の向上に役立つ場合)。

「コンテンツ全体」コマンドに何か問題があり、それが問題を引き起こしているのではないかと思います。

特定のファイルまたはフォルダーに変更を加える前に、1 つの変更を加えた後、すべてのファイルに「アーカイブ済み」のタグがあるかどうかを再度確認します。これは最初はメモリにキャッシュされると思っていました。

何かアイデアがあればぜひ教えてください!

乾杯、

ジェームズ

編集: システムは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))

関連情報