Вот сценарий:
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))