I want to delete all files from $(Build.ArtifactStagingDirectory)
(it is so called "a" folder in the appropriate build agent's folder, click here to read more about predefined variables in azure pipelines). I also know that Delete Files task uses the minimatch patterns.
The inner structure of my $(Build.ArtifactStagingDirectory)
:
a
|--Client
| |--ImportantFolder
| | |--FileNumber1
| | |--....(Many other files here)
| | |--FileNumberN
| |--OtherJunkFolder
| |--OtherFile
|--JunkFolder
So, the folder a
has two subfolders (Client
and JunkFolder
), the Client
folder has one folder named ImportantFolder
, one folder named OtherJunkFolder
and one file named OtherFile
. ImportantFolder
has the many files with different names and extensions.
How can I delete all folders and files from the folder a
except those in folders Client/ImportantFolders
? In other words: I want to do something like this:
**
!Client/ImportantFolder/**
But this pattern delete everything from the folder a
. I also tried
**
!(Client/**)
and just
**
!(Client)
Both didn't work.
After testing, pattern !(Client)
works. But it also keeps the OtherJunkFolder
and OtherFile
in folder Client.
Pattern !(Client/ImportantFolder)
does not work.
As workaround you can use a script task to delete all folders and files from the folder except those in folders Client/ImportantFolders. Please check below powershell script in a powershell task.
Get-ChildItem "$(build.artifactstagingdirectory)" | where { $_.Name -inotmatch "Client" } | Remove-Item -Recurse
Get-ChildItem "$(build.artifactstagingdirectory)/Client" | where { $_.Name -inotmatch "ImportantFolder" } | Remove-Item -Recurse
Another possible workaround is the use a copy file task to copy the folder Client/ImportantFolder
to a new folder. For below example, folder Client/ImportantFolder
will be copied to a new folder $(Agent.BuildDirectory)/a1
. And then point the following tasks to this new folder.
If your intention is to only include folder Client/ImportantFolder
in your artifacts to be published in the following publish build artifacts task. The easiest way is to point Path to publish
to folder Client/ImportantFolder
. Then the artifacts published will only have folder Client/ImportantFolder
. Check below example:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With