30

我知道要找到.h我需要使用的所有文件:

find . -name "*.h"

但是如何找到所有的.hAND.cpp文件?

4

6 回答 6

44
find . -name \*.h -print -o -name \*.cpp -print

或者

find . \( -name \*.h -o -name \*.cpp \) -print
于 2008-11-10T14:35:40.593 回答
13
find -name "*.h" -or -name "*.cpp"

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

于 2008-11-10T14:40:18.573 回答
7

Paul Tomblin 已经提供了一个了不起的答案,但我想我看到了你所做的事情的模式。

有一天,您可能会使用 find 生成一个文件列表以使用 grep 进行处理,而对于此类任务,存在一种对用户更友好的工具,Ack

适用于任何支持 perl 的系统,并且在目录中递归搜索所有与 C++ 相关的文件以查找给定的字符串非常简单

ack "int\s+foo" --cpp 

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

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

于 2008-11-10T15:39:25.863 回答
5

一个简短而清晰的方法find是:

find . -regex '.*\.\(cpp\|h\)'

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

于 2015-04-30T08:59:53.853 回答
2
find . -regex ".*\.[cChH]\(pp\)?" -print

这在cygwin中对我来说很好。

于 2010-10-04T20:31:16.583 回答
2

您可以使用find以下简短形式:

find \( -name '*.cpp' -o -name '*.h' \) -print

-print可以省略。-o当您想要查找多种类型的文件并执行相同的工作(例如计算 md5sum)时,仅在表达式之间使用特别有用。

于 2014-08-07T05:19:54.593 回答