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@xxxxxxxxxxxxxxxx Z1aaaaaaa@xxxxxxxxxxxxxxxx
-- 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:-)