(简称)使用“find”忽略多个文件名模式?

(简称)使用“find”忽略多个文件名模式?

似乎我可以*.dll通过执行以下操作来忽略 find 搜索中的某个文件名模式()

find ! -name '*.dll'

并忽略多个模式

$ find . ! -name '*.h' ! -name '*.cpp' ! -name '*.dll'

这个有缩写形式吗?

我尝试了以下操作(但没有成功)

$ find . ! -name '*.h *.cpp *.dll'

答案1

如果您的版本find-regex主版本,您可以使用它。不幸的是,它是非标准的,您需要扩展的正则表达式语法,而这甚至不是标准的。使用GNUfind,你用来-regextype设置正则表达式语法(并且它会要搜索的目录),因此它会是这样的:

find . -regextype egrep '!' -regex '.*[.](h|cpp|dll)'

BSD(/ macOS)find,你可以使用-E选项要搜索的目录,因此它看起来像这样:

find -E . '!' -regex '.*[.](h|cpp|dll)'

请注意,这是一个正则表达式,而不是 glob(通配符)模式,因此您必须使用.*来匹配任何字符串,并将 转义或括起来,.这样它就不会被视为“匹配任何单个字符”。此外,正则表达式模式与整个路径匹配,而不仅仅是文件名(这里无关紧要,但它会匹配其他模式)。

相关内容