“如何使用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\)'