如何使用unix"find"命令查找所有cpp和h文件?

29 unix find

我知道要找到我需要使用的所有h文件:find.-name"*.h"但如何查找所有h AND cpp文件?

Pau*_*lin 42

find . -name \*.h -print -o -name \*.cpp -print
Run Code Online (Sandbox Code Playgroud)

要么

find . \( -name \*.h -o -name \*.cpp \) -print
Run Code Online (Sandbox Code Playgroud)

  • 或者,为了更好地重用代码:`find.\(-name'*.h'-o -name'*.cpp'\) - print` (2认同)

Phi*_*ati 13

find -name "*.h" -or -name "*.cpp"
Run Code Online (Sandbox Code Playgroud)

(编辑以保护被解释为格式化的星号)

  • `-or`是一个GNUism.但是`-o`是标准的(POSIX). (4认同)

Ken*_*ric 6

Paul Tomblin 已经提供了一个很棒的答案,但我想我看到了你正在做的事情的模式.

有可能你会使用find来生成一个文件列表,以便有一天使用grep进行处理,并且对于这样的任务,存在一个更加用户友好的工具,Ack

适用于任何支持perl的系统,并以递归方式搜索给定字符串的所有C++相关文件,就像在

ack "int\s+foo" --cpp 
Run Code Online (Sandbox Code Playgroud)

"--cpp"默认情况下匹配.cpp .cc .cxx .m .hpp .hh .h .hxx文件

(默认情况下它也会跳过存储库目录,因此不会匹配恰好看起来像文件的文件.)


mdu*_*dup 5

一个简短明了的方法find是:

find . -regex '.*\.\(cpp\|h\)'
Run Code Online (Sandbox Code Playgroud)

从手册页-regex:"这是整个路径上的匹配,而不是搜索." 因此需要前缀.*以匹配./dir1/dir2/...文件名之前的路径的开头.