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 users mailing list