如何在minimatch模式中使用NOT和OR进行过滤?

时间:2017-06-14 07:11:21

标签: tfs tfsbuild glob minimatch

我们正在使用TFS 2017和复制文件构建步骤将构建结果的特定文件复制到另一个目录。具体来说,我们只想复制* .dll和* .exe,但没有* .Tests.dll或* .resources.dll。

构建步骤支持使用minimatch模式来过滤文件,但我无法应用它来应用BOTH过滤器。

模式如下:

bin\**\?(*.exe|*.dll)
bin\**\!(*.Tests.dll|*.resources.dll)

例如,文件夹内容为:

bin\Yes.dll
bin\Yes.exe
bin\No.Tests.dll
bin\No\Some.resources.dll

似乎模式是按顺序应用的,因此它们都可以单独工作,但不能一个接一个地工作。

我试过像

这样的东西
bin\**\?(*.exe|*.dll)!(*.Tests.dll|*.resources.dll)

但是,这既不起作用也没有过滤掉任何东西。我能以某种方式将这些组合成一个过滤器吗? docs不承保此案。

1 个答案:

答案 0 :(得分:0)

好吧,似乎你实际上可以直接把表达式放在另一个之后,过滤器必须更加严格。这有效,但我仍然不知道为什么:

bin\**\!(*.Tests.dll|*.resources.dll|*.pdb|*.xml|*.manifest)?(*.exe|*.dll)