匹配.h,.m,.mm文件但不是.html

时间:2016-04-20 21:53:04

标签: bash

我想对.h, .m, .mm类型的源文件进行一些处理。我不想包含.html个文件。

以下错过了.mm文件,因为我只匹配.h.m,而不是试图捕获更长的扩展名。

find ./ -type f -name "*.[hm]"

这只捕获.mm文件,因为?运算符始终匹配字符。我喜欢它是一个可选的零或一个匹配,如正则表达式。

find ./ -type f -name "*.[hm]?"

但是如果我使用*代替它,它匹配0或多个字符。这会返回所有内容,但也包含我不想要的.html文件。

find ./ -type f -name "*.[hm]*"

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:3)

您可以结合条件:

find -type f -and \( -name '*.h' -or -name '*.m' -or -name '*.mm' \)

或者:

find ./ -type f -and -name '*.[hm]*' -and -not  -name '*.html'

答案 1 :(得分:1)

您正在运行 OS X 。有-E开关可用于告诉find正则表达式是扩展表达式。

  

解释正则表达式,然后将-regex和-iregex primaries解释为扩展(现代)正则表达式而不是基本正则表达式(BRE' s)。 re_format(7)手册页完全描述了两种格式。

您的命令现在应该有效:

find -E . -type f -regex ".*\.([hm]|mm)"