gpt4 book ai didi

azure - 如何在“删除文件”任务中从删除中排除某些目录和文件

转载 作者:行者123 更新时间:2023-12-02 06:18:43 26 4
gpt4 key购买 nike

我想删除 $(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 有两个子文件夹(ClientJunkFolder),Client 文件夹有一个名为 ImportantFolder 的文件夹、一个名为 OtherJunkFolder 的文件夹和一个名为 OtherFile 的文件。 ImportantFolder 包含许多具有不同名称和扩展名的文件。

如何删除文件夹 a 中除文件夹 Client/ImportantFolders 中的所有文件夹和文件?换句话说:我想做这样的事情:

**
!Client/ImportantFolder/**

但是此模式会删除文件夹 a 中的所有内容。我也尝试过

**
!(Client/**)

只是

**
!(Client)

两者都不起作用。

最佳答案

经过测试,模式 !(Client) 有效。但它还将 OtherJunkFolderOtherFile 保留在文件夹 Client 中。

模式!(Client/ImportantFolder) 不起作用。

作为解决方法,您可以使用脚本任务删除该文件夹中的所有文件夹和文件(Client/ImportantFolders 文件夹中的文件夹和文件除外)。请检查 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 。然后将以下任务指向这个新文件夹。

enter image description here

如果您的目的是仅将文件夹 Client/ImportantFolder 包含在要在以下发布构建工件任务中发布的工件中。最简单的方法是将发布路径指向文件夹Client/ImportantFolder。那么发布的工件将只有文件夹 Client/ImportantFolder。检查下面的示例:

enter image description here

关于azure - 如何在“删除文件”任务中从删除中排除某些目录和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60546946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com