find with -print0 returns incorrect results

John Summerfield debian at herakles.homelinux.org
Mon Dec 10 22:52:07 UTC 2007


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:

Think about the order of evaluation.

> 
>     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

GNU find has an implied print at the end, iff there has been no other 
print 'test." Not all versions of find does this.

In this context, by "print" I include any test that prints.

-- 

Cheers
John

-- spambait
1aaaaaaa at coco.merseine.nu  Z1aaaaaaa at coco.merseine.nu
-- Advice
http://webfoot.com/advice/email.top.php
http://www.catb.org/~esr/faqs/smart-questions.html
http://support.microsoft.com/kb/555375

You cannot reply off-list:-)




More information about the users mailing list