On Tue, Oct 16, 2007 at 03:14:12AM +0100, Steve Long wrote: > Gilles Dartiguelongue wrote: > > I haven't reread the fine mans for a while but iirc, + could lead you to > > hit the argument buffer limit of your shell. xargs has --max-args to get > > around that and is also way faster than any -exec variant (at least > > that's what the bench I did on a PIV2.6Ghz showed me about 4 months ago) > > > It doesn't: find will just execute the command as many times as needed (each > time with an argument length maximally less than ARG_MAX. Well, it did when > we tested this a couple of months ago.) So it's optimal in that sense. I > have no idea on the timing measurements, but I don't like pipes and > subshells as a rule (externals are bad enough!;>) It'd be interesting to > see measurements over 100000 loops with long argument lists requiring > multiple invocations per pass, I suppose.
Here's a quick benchmark:
% \
repeat 3 \time find -name '*.ebuild' | xargs cat >/dev/null; echo; \
repeat 3 \time find -name '*.ebuild' -exec cat {} ';' >/dev/null; echo; \
repeat 3 \time find -name '*.ebuild' -exec cat {} '+' >/dev/null
66.28 real 0.77 user 4.71 sys
30.95 real 0.76 user 4.73 sys
30.08 real 0.76 user 4.67 sys
174.72 real 18.10 user 112.92 sys
208.69 real 18.07 user 117.05 sys
173.64 real 18.10 user 110.79 sys
62.61 real 1.26 user 10.88 sys
54.98 real 1.25 user 10.46 sys
41.84 real 1.25 user 10.00 sys
the third variant doesn't get any faster than on the last line.
( tested in zsh, with bsd time and gnu find )
-- Elias
pgpUglx1YKVOi.pgp
Description: PGP signature
