bug-findutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: -exec test (use which to only find test once)


From: Peng Yu
Subject: Re: -exec test (use which to only find test once)
Date: Wed, 25 Mar 2015 19:40:45 -0500

For my case, it is about 10% time difference.

On Wednesday, March 25, 2015, Bernhard Voelker <address@hidden>
wrote:

> On 03/25/2015 11:39 PM, Peng Yu wrote:
> > I find that "-exec test ..." can be slower than "-exec $(which test)
> > ...". Is possible that `find` internally use "which", so that users
> > don't need to explicitly call it? Thanks.
>
> How much slower is it for you?
>
> In my test case, the findutils repository which currently contains
> 13334 files, the command
>   $ find . -exec /usr/bin/test '{}' \;
> takes ~6.5s while without the absolute path it needs ~6.6 - ~6.7 seconds.
> In my case, "/usr/bin" is the 3rd entry in $PATH.  When moving "/usr/bin"
> to the first position in PATH, the time is about equal to that with the
> absolute path.  This means the overhead of fork/execvp is much greater
> than searching for the program in execvp.
> If I add more entries in PATH before "/usr/bin", then the time increases,
> as expected.
>
> You can play with different values for N:
>
>
>   ( N=50; \
>     export PATH="$(yes $HOME/bin | head -n $N | paste -s -d:):/usr/bin"; \
>     for i in 1 2 3; do \
>       for f in test /usr/bin/test; do \
>         echo "=== $f ==="; time find . -exec $f '{}' \; ; \
>       done ; \
>     done )
>
> Of course the situation gets worse when a directory on a remote files
> system is in PATH before "/usr/bin".
>
> Regarding 'internally use "which"': find does not do anything special
> and instead relies on execvp() to execute the program.  And I think
> this is exactly what is specified and expected.  The example seems to
> be a bit contrived, but there may even be scripts relying on running
> different programs in the invocation for each matched file.
>
> Have a nice day,
> Berny
>
>
>

-- 
Regards,
Peng


reply via email to

[Prev in Thread] Current Thread [Next in Thread]