我想对.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]*"
关于如何做到这一点的任何想法?
答案 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)"