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,正如已经演示的那样。