我知道要找到.h
我需要使用的所有文件:
find . -name "*.h"
但是如何找到所有的.h
AND.cpp
文件?
find . -name \*.h -print -o -name \*.cpp -print
或者
find . \( -name \*.h -o -name \*.cpp \) -print
find -name "*.h" -or -name "*.cpp"
(编辑以保护被解释为格式的星号)
Paul Tomblin 已经提供了一个了不起的答案,但我想我看到了你所做的事情的模式。
有一天,您可能会使用 find 生成一个文件列表以使用 grep 进行处理,而对于此类任务,存在一种对用户更友好的工具,Ack
适用于任何支持 perl 的系统,并且在目录中递归搜索所有与 C++ 相关的文件以查找给定的字符串非常简单
ack "int\s+foo" --cpp
"--cpp"
默认匹配.cpp .cc .cxx .m .hpp .hh .h .hxx
文件
(默认情况下它还会跳过存储库目录,因此不会匹配恰好看起来像其中的文件的文件。)
一个简短而清晰的方法find
是:
find . -regex '.*\.\(cpp\|h\)'
从手册页-regex
:“这是整个路径上的匹配,而不是搜索。” 因此需要前缀 with.*
以匹配./dir1/dir2/...
文件名之前的路径开头。
find . -regex ".*\.[cChH]\(pp\)?" -print
这在cygwin中对我来说很好。
您可以使用find
以下简短形式:
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
可以省略。-o
当您想要查找多种类型的文件并执行相同的工作(例如计算 md5sum)时,仅在表达式之间使用特别有用。