似乎我可以*.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(通配符)模式,因此您必须使用.*
来匹配任何字符串,并将 转义或括起来,.
这样它就不会被视为“匹配任何单个字符”。此外,正则表达式模式与整个路径匹配,而不仅仅是文件名(这里无关紧要,但它会匹配其他模式)。