find with -print0 returns incorrect results
Rick Stevens
rstevens at internap.com
Mon Dec 10 21:52:17 UTC 2007
On Mon, 2007-12-10 at 23:23 +0200, Razvan RACASANU wrote:
> Thanks for your answers, but I still have a question about this.
>
> So, if I understand correctly, -print0 is considered as just another
> test (just like -iname) that is evaluated for each file according to
> operator precedence. In this case, since -print0 always returns true,
> shouldn't the following commands be equivalent:
>
> find . -type f -and -print0 -and \( -iname '*.html' -or -iname
> '*.js' \) | xargs -0
> and
> find . -type f -and \( -iname '*.html' -or -iname '*.js' \) -and
> -print0 | xargs -0
>
> The first one outputs:
> ./a.js ./a.css ./a.html
> The second one outputs:
> ./a.js ./a.html
No. Remember, -print0 prints immediately, so the only test that was
applied before the print was "-type f" in the first one. In the second
one, you did the "-iname" tests. Since they fail on the "a.css" file,
the -print0 wasn't invoked for that file.
----------------------------------------------------------------------
- Rick Stevens, Principal Engineer rstevens at internap.com -
- CDN Systems, Internap, Inc. http://www.internap.com -
- -
- Always remember you're unique, just like everyone else. -
----------------------------------------------------------------------
More information about the fedora-list
mailing list