“如何使用unix”;查找“;命令查找所有cpp和h文件?

“如何使用unix”;查找“;命令查找所有cpp和h文件?,unix,find,Unix,Find,我知道要找到我需要使用的所有.h文件: find . -name "*.h" 但是如何找到所有.h和.cpp文件呢 find . -name \*.h -print -o -name \*.cpp -print 或 (编辑以保护被解释为格式化的星号)已经提供了一个非常好的答案,但我认为我看到了你所做的一个模式 有一天,您可能会使用find生成一个文件列表,并使用grep进行处理,对于这类任务,有一个更为用户友好的工具 对支持Perl的任何系统进行工作,并且递归地查找给定字符串中的所有与C++

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

find . -name "*.h"
但是如何找到所有
.h
.cpp
文件呢

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

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

已经提供了一个非常好的答案,但我认为我看到了你所做的一个模式

有一天,您可能会使用find生成一个文件列表,并使用grep进行处理,对于这类任务,有一个更为用户友好的工具

对支持Perl的任何系统进行工作,并且递归地查找给定字符串中的所有与C++相关的文件,都与

一样简单。
ack "int\s+foo" --cpp 
“--cpp”
默认情况下匹配
.cpp.cc.cxx.m.hpp.hh.h.hxx
文件

(默认情况下,它还会跳过存储库目录,因此不会匹配与其中的文件相似的文件。)


这对我来说在cygwin测试很好。

您可以使用
find
这个简短的形式:

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

-可以省略打印。在表达式之间使用
-o
尤其有用,因为您需要查找多种类型的文件并执行同一项工作(比如计算md5sum)。

使用
查找
的一种简单明了的方法是:

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

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

这只返回名称正好为“.h”或“.cpp”的文件。需要通配符才能按需要工作:find-name“.h”-或-name“.cpp”
-或
是GNUism。但是
-o
是标准的(POSIX)。我可以确认,在Ubuntu上,以下功能正在发挥作用:
find./-name“*.h”-o-name“*.c*”
(我不仅在寻找cpp文件(c++),也在寻找cs文件(c#))
find
在过去几年中有什么变化吗?我无法在Ubuntu9.10或OSX10.6中使用它。它查找
.cpp
文件,但不查找
.h
文件。示例:尝试
find-name\*.h-print-o-name\*.cpp-print
或者,为了更好地重用代码:
find\(-name'*.h'-o-name'*.cpp'\)-打印
,也会找到扩展名为
c
cpp
Hpp
,既不是cpp文件,也不是通用扩展名的文件。此外,您没有正确地转义最后一个点,这意味着您还将使用名为
xcpp
.C
的数学文件。由于没有掌握正则表达式并正确查找,您引入了几个问题。的可能重复
find . -regex ".*\.[cChH]\(pp\)?" -print
find \( -name '*.cpp' -o -name '*.h' \) -print
find . -regex '.*\.\(cpp\|h\)'