如何在linux中查找当前目录下的.h,.c和.cc文件?

如何在linux中查找当前目录下的.h,.c和.cc文件?
find . -name "*.[hc]|*.cc"

上述方法不起作用,为什么?

更新

如何使用单一模式找到这三种文件?

答案1

它不起作用,因为-name它需要一个 shell 模式。你可以改用-regex,或者像这样组装你的模式:

find . -name '*.c' -o -name '*.h' -o -name '*.cc'

编辑
要使用单一模式执行此操作,您需要一个正则表达式:

find . -regextype posix-extended -regex '.*\.(c|h|cc)'

我确信您可以使用默认的 emacs 正则表达式来完成此操作;我不使用它们或者不知道它们主要的区别,所以我选择了我知道的那个。

如果你真的想使用单个 shellglob,那你就没那么幸运了:多个字符串的唯一语法是{a,b},而 不支持find。但是我的第一个示例中的命令构建/链接没有任何问题。这就是 的find预期用途。

答案2

如果你真的想使用正则表达式那么

 find -regex "\(.*\.[hc]\|.*\.cc\)"

应该可以解决问题,但更常见的方法是使用 -o,正如已经演示的那样。

相关内容