tell application "iPhoto"
count every photo whose width < 400
--> 3897
get width of item 1 of every photo whose width < 400
--> 270.0
remove item 1 of every photo whose width < 400 from album 0
get width of item 3 of every photo whose width < 400
--> 370.0
remove item 3 of every photo whose width < 400 from album 0
...
うーん。every photo を毎回送っているな。これは...
つまり、repeat with aPhoto in (every photo whose width < 400 ) の()の中を毎回 eval ってる。
ってことは...
tell application "iPhoto"
set small to 0
set aList to every photo whose width < 400
repeat with aPhoto in aList
remove aPhoto from album 0
set small to small + 1
if small mod 100 = 0 then
say small
say "is removed"
-- empty trash
end if
end repeat
-- empty trash
small
end tell
で、良いみたいです。削除には時間がかかるのは仕方がないが。もっとも、aList が小さくなったので、この方法が可能になったらしい。
うーん、でも、これでも、ゴミ箱に入る数が合わない。 やっぱり empty trash しないとダメなのかな。
tell application "iPhoto"
set small to 0
set aList to every photo whose width < 400
set num to (count of aList) as text
say num & " photos will be removed"
repeat with aPhoto in aList
remove aPhoto from album 0
set small to small + 1
if small mod 100 = 0 then
say small
say "photos are removed"
empty trash
photo 0
end if
end repeat
-- empty trash
small
end tell
empty tash の後の、photo 0 がないと、album 0 がないとか言って来るみたいです。おまじないです。
でも、速度的には、番号でアクセスする方が高速。おそらく、aPhoto でアクセスすると、object id かなんかを送っていて、それを探すのに時間がかかっているらしい。なので、photo 253 とかでアクセスする方が高速なようですね。
でも、empty trash の後で、何故か、
album 0 not found
とか言って来る。ダメじゃん。すると、tiwtter.com/Piyomaru 氏が、
with timeout of 36000 seconds
tell application "iPhoto"
remove (every photo whose width < 400)
end tell
end timeout
で、一瞬で終るっていうんですが、timeout 36000 seconds って一瞬なんですか? それに、このscriptって、「debug 不可能」だと思うんだけど。でも、まぁ、かなり速いかな。といっても、3700削除するのに、26分で終らず。
たこな言語作るんじゃねぇ! って所ですが、たぶん、言っても聞かない人が作っていると思われ。
No comments:
Post a Comment