find with -print0 returns incorrect results

John Summerfield debian at herakles.homelinux.org
Sat Dec 8 19:50:03 UTC 2007


Tony Nelson wrote:
> 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.
Not quite. from 'man find'
        -print True; print the full file name on the standard output, 
followed by a newline.

        -print0
               True;  print  the  full  file name on the standard 
output, followed by a null character.  This allows
               file names that contain newlines to be correctly 
interpreted by programs that process the  find  out-
               put.



-- 

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