2007年03月30日(金) [過去の今日]
#2 findの-execが異様に遅い
あわてるな ディスクはそんなに 速くない という記事で、「-execは遅い」と書かれてたので試してみた。
$ time find /usr/src -type f -exec ls -l {} \; >/dev/null real 1559.66 user 496.82 sys 688.65
$ time find /usr/src -type f -print0 | xargs -0 ls -l >/dev/null real 176.98 user 0.53 sys 2.20
……ほんとだ。なんでこんなに顕著に遅くなるんだろう。-exec使わずxargs使え、ってことだな。もちろん -print0と-0を忘れずに 。
(@766)
@ 2007-04-06追記:
相応しいかどうかもあるまい という記事で、「それは{} +じゃなくて{} ;でやってるからですよ」というご指摘。 しかしGNU findには{} +が無いのだそうで。
というわけでFreeBSDで試して……と思ったら、手元のFreeBSD 4.11Rではまだ{} +がないようだ。比較的最近の実装なのかな。お、GNU findutils 4.3系列では {} + もサポートしてるみたいだ(ソースのdocで確認)。いまDebianに入ってるのは4.2だから、まだサポートしてないわけか。
んでも-print0と-0があれば要らない気もするんだが。