Martin Steigerwald wrote: > martin@merkaba:~/Zeit/find-Test> find \( -type d -print \) -o \( -name "file" -printf "%s %p" \) -o \( -name "anotherfile" -print0 \) > . > ./anotherfile./dir > 0 ./file% > martin@merkaba:~/Zeit/find-Test> It is inconsistent to mix -print0 with -print and -printf. Just use one or the other consistently. > Which is the same as without braces: > > martin@merkaba:~/Zeit/find-Test> find -type d -print -o -name "file" -printf "%s %p" -o -name "anotherfile" -print0 > . > ./anotherfile./dir > 0 ./file% Yes. > Now I am wondering about the order. > > Why does find print "another file" before ".dir" and "file" after "another > file"? You seem to be missing the basic operation of find. The find program iterates across ever file and processes arguments from left to right for that file. As long as the action returns true then find continues to process arguments from left to right. If any argument returns false then processing stops for that file. Find then proceeds to the next file and restarts processing arguments for the next file from left to right. find -type d -print -o -name "file" -printf "%s %p" -o -name "anotherfile" -print0 For every file find processes it walks across the argument list. For your example arguments it is something like this: for each file do if type d then print else if name "file" then printf "%s %p" else if name "anotherfile" then print0 end end end end Also 'find' walks through the directory in the order of the entries in the list. It doesn't sort the entries first. This means that they are in an arbitrary order. They might appear in any order but the order will be repeatable for that particular directory. Bob
Attachment:
signature.asc
Description: Digital signature