Now what would you expect this to print out?

Jonathan McKeown jonathan at hst.org.za
Mon May 19 10:37:55 UTC 2008


On Monday 19 May 2008 11:46, Jonathan Chen wrote:
> On Mon, May 19, 2008 at 01:49:35AM -0700, Garrett Cooper wrote:
> > Riddle for the day for folks that have source trees... what would you
> > expect this to print out (ask yourself the question and then execute the
> > command)?
> >
> >      find /usr/src -name Makefile -or -name '*.mk' -print
> >
> > The expected output and what actual output differed in my mind, but maybe
> > somebody else can "shed some light" on the logic behind what happened
>
> It's a problem that catches many young players with find(1). One has
> to remember from reading the man-page that all directives have an
> implicit AND operator on it; and that includes the "-print" directive.
> So to get what you want, you have to introduce brackets:
>
>     find /usr/src \( -name Makefile -or -name '*.mk' \) -print

Or, slightly bizarrely, just leave the -print off altogether - as the manpage 
says,

    If none of -exec, -ls, -print0, or -ok is specified, the given
    expression shall be effectively replaced by ( given expression ) -print.

[Note the parens around given expression]

I forget where I saw this quote first, but the last five words always make me 
think of the find command:

    Real Programmers consider "what you see is what you get" to be just as
    bad a concept in Text Editors as it is in women. No, the Real Programmer
    wants a "you asked for it, you got it" text editor - complicated, cryptic,
    powerful, unforgiving, dangerous.

Jonathan


More information about the freebsd-questions mailing list