“find: paths must precede expression:” How do I specify a recursive search that also finds files in the current directory?

前端 未结 6 1851
谎友^
谎友^ 2020-11-28 01:49

I am having a hard time getting find to look for matches in the current directory as well as its subdirectories.

When I run find *test.c

6条回答
  •  半阙折子戏
    2020-11-28 02:25

    From find manual:

    NON-BUGS         
    
       Operator precedence surprises
       The command find . -name afile -o -name bfile -print will never print
       afile because this is actually equivalent to find . -name afile -o \(
       -name bfile -a -print \).  Remember that the precedence of -a is
       higher than that of -o and when there is no operator specified
       between tests, -a is assumed.
    
       “paths must precede expression” error message
       $ find . -name *.c -print
       find: paths must precede expression
       Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
    
       This happens because *.c has been expanded by the shell resulting in
       find actually receiving a command line like this:
       find . -name frcode.c locate.c word_io.c -print
       That command is of course not going to work.  Instead of doing things
       this way, you should enclose the pattern in quotes or escape the
       wildcard:
       $ find . -name '*.c' -print
       $ find . -name \*.c -print
    

提交回复
热议问题