find with -print0 returns incorrect results

Tony Nelson tonynelson at georgeanelson.com
Sat Dec 8 16:22:38 UTC 2007


At 2:27 PM +0200 12/8/07, Razvan RACASANU wrote:
>Hi,
>
>I'm having some problems using find with -print0: it is returning
>different files depending on the position of -print0.
>
>To illustrate this, suppose the current directory has 3 files: a.html,
>a.css and a.js. From this directory I would like to list the file
>names of all html and js files, but not those of css files.
>
>If I try this:
>    find . -type f -print0 -iname "*.html" -or -iname "*.js" | xargs -0
>the result looks like this:
>    ./a.html        ./a.js        ./a.css
>
>If I try this:
>    find . -print0 -type f -iname "*.html" -or -iname "*.js" | xargs -0
>the result looks like this:
>    .        ./a.html        ./a.css
>
>If I try this:
>    find . -type f -iname "*.html" -or -iname "*.js" -print0 | xargs -0
>the result looks like this:
>    ./a.js
>
>Can anybody shed some light on what am I doing wrong?

Conditions in find that aren't joined with an explicit operation are joined
with an implicit "and", so you effectively had '\( -type f -and -iname
"*.html" \) -or -iname "*.js"', where the first -iname was bound to -type
by the implicit -and and operator precedence.
-- 
____________________________________________________________________
TonyN.:'                       <mailto:tonynelson at georgeanelson.com>
      '                              <http://www.georgeanelson.com/>




More information about the fedora-list mailing list