我知道要查找所有的.h
文件,我需要使用:
find . -name "*.h"
但是如何查找所有的.h
和.cpp
文件?
find . -name \*.h -print -o -name \*.cpp -print
或者find . \( -name \*.h -o -name \*.cpp \) -print
find
命令有所改变吗?我无法在 Ubuntu 9.10 或 OS X 10.6 中让它正常工作。它可以找到 .cpp
文件,但无法找到 .h
文件。示例:https://gist.github.com/783687 - Natefind . -name \*.h -print -o -name \*.cpp -print
- Paul Tomblinfind . \( -name '*.h' -o -name '*.cpp' \) -print
- James Kofind -name "*.h" -or -name "*.cpp"
(edited to protect the asterisks which were interpreted as formatting)find -name "*.h" -or -name "*.cpp"
- lmopfind ./ -name "*.h" -o -name "*.c*"
(我不仅要查找cpp文件(C ++),还要查找cs文件(C#):-)) - Dominiquefind
的简洁明了的方法是:find . -regex '.*\.\(cpp\|h\)'
-regex
的man页面中写道:“这是对整个路径进行匹配,而不是搜索。”因此需要在路径前加上.*
以匹配路径./dir1/dir2/...
的开头,然后才能匹配文件名。
Paul Tomblin已经提供了出色的答案,但我认为你正在做一件事情中存在着一种模式。
很有可能有一天你会使用find生成一个文件列表,并使用grep进行处理,而为此存在一种更加用户友好的工具,Ack
它适用于任何支持perl的系统,且在目录中递归搜索所有C++相关文件以查找给定字符串非常简单。
ack "int\s+foo" --cpp
"--cpp"
默认匹配 .cpp .cc .cxx .m .hpp .hh .h .hxx
文件
(它默认跳过仓库目录,因此不会匹配那些看起来像在其中的文件。)
find . -regex ".*\.[cChH]\(pp\)?" -print
这个在cygwin里对我来说测试通过了。
c
、Cpp
、Hpp
的文件,它们既不是cpp文件,也不是常见的扩展名。此外,您没有正确转义最后一个点,这意味着您还将匹配名为例如xcpp
或.C
的数学文件。由于未掌握正则表达式和查找技巧,您引入了几个问题。 - Sebastian Mach您可以使用以下简短形式的find
:
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
可以省略。在表达式之间仅使用-o
是特别有用的,当你想查找多种类型的文件并执行同一项任务(比如计算md5sum)时。