首页 > 解决方案 > 使用正则表达式和“查找”命令查找 *.cpp、*.hpp、*.c 和 *h 文件

问题描述

我有以下内容:

find . -type f | grep -E '\.(cpp|hpp|c|h)$'

我怎样才能使用 find 命令来做到这一点?

标签: bash

解决方案


find . -type f -iname \*\.cpp -o -iname \*\.hpp -o -iname \*\.c -o -iname \*\.h

  • .- 在当前目录中查找
  • -type f- 查找所有文件条目
  • -iname \*\.cpp- 查找不区分大小写的文件名,它是某个字符串(与*反斜杠匹配,\因此 shell 不会将其扩展为本地文件名)而不是.反斜杠,因此它不会匹配任何字符,而不是扩展名
  • -o代表“或”,因此可以“或”多个条件

此外,正如 Matteo_Ragni 在他的回答中所说,您可以使用-regex在您的情况下可能更简单的选项。

使用 GNUfind可以使用-regex适当的模式

find . -type f -regex '.*\.[hpp|cpp|c|h]'

正如@MatteoRagni 所建议的那样,使用这样的正则表达式可能会更好:

find -regex ".*\.\(hpp\|cpp\|c\|h\)$"

这主要取决于您find支持的正则表达式模式类型以及默认的正则表达式模式类型。有关更多信息,请参阅正确的参数文档-regex-regextype相应的正则表达式类型。


推荐阅读