我想从$(Build.ArtifactStagingDirectory)
中删除所有文件(在适当的构建代理程序的文件夹中被称为“ a”文件夹,单击here以了解有关Azure管道中预定义变量的更多信息)。我也知道Delete Files task使用minimatch patterns。
我的$(Build.ArtifactStagingDirectory)
的内部结构:
a
|--Client
| |--ImportantFolder
| | |--FileNumber1
| | |--....(Many other files here)
| | |--FileNumberN
| |--OtherJunkFolder
| |--OtherFile
|--JunkFolder
因此,文件夹a
有两个子文件夹(Client
和JunkFolder
),Client
文件夹有一个名为ImportantFolder
的文件夹,一个名为{ {1}}和一个名为OtherJunkFolder
的文件。 OtherFile
包含许多具有不同名称和扩展名的文件。
我如何从文件夹ImportantFolder
中删除文件夹a
中的所有文件夹和文件?换句话说:我想做这样的事情:
Client/ImportantFolders
但是此模式会删除文件夹**
!Client/ImportantFolder/**
中的所有内容。我也尝试过
a
还有
**
!(Client/**)
两个都不起作用。
答案 0 :(得分:1)
尝试不使用**
且仅使用!(Client)
,它将删除JunkFolder
文件夹之外的Client
。
您可以做Client/ImportantFolder
,我不知道为什么,我想是因为删除看起来是在a
文件夹上,而不是更深。
答案 1 :(得分:1)
测试后,模式!(Client)
有效。但这也将OtherJunkFolder
和OtherFile
保留在客户端文件夹中。
模式!(Client/ImportantFolder)
不起作用。
作为解决方法,您可以使用脚本任务从文件夹中删除除客户端/重要文件夹中的所有文件夹和文件。请在powershell任务中检查以下powershell脚本。
Get-ChildItem "$(build.artifactstagingdirectory)" | where { $_.Name -inotmatch "Client" } | Remove-Item -Recurse
Get-ChildItem "$(build.artifactstagingdirectory)/Client" | where { $_.Name -inotmatch "ImportantFolder" } | Remove-Item -Recurse
另一个可能的解决方法是使用复制文件任务将文件夹Client/ImportantFolder
复制到新文件夹。对于下面的示例,文件夹Client/ImportantFolder
将被复制到新文件夹$(Agent.BuildDirectory)/a1
。然后将以下任务指向该新文件夹。
如果您的意图是仅将文件夹Client/ImportantFolder
包含在要发布的工件中,请在以下“发布构建工件”任务中进行发布。最简单的方法是将Path to publish
指向文件夹Client/ImportantFolder
。这样,发布的工件将仅具有文件夹Client/ImportantFolder
。请检查以下示例: