スクリプトは次のとおりです:
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))