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