Это может быть трудной задачей для az storage blob delete-batch
. Поддерживаемые шаблоны ограничены '*'
, '?'
, '[seq]'
и '[!seq]'
, которые находятся в модуле Pythons fnmatch , и их может быть недостаточно для вашего варианта использования.
Вместо этого вы можете написать скрипт Azure PowerShell , который сделает это за вас. Существует множество удобных командлетов управления Az.Storage , которые можно использовать для выполнения этой задачи.
Демонстрация:
$storageAccountName = "STORAGE_ACCOUNT_NAME"
$storageAccountKey = "STORAGE_ACCOUNT_KEY"
$container = "web"
$foldersToKeep = "data", "cms"
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
Get-AzStorageBlob -Context $storageContext -Container $container -Blob * | ForEach-Object {
$contents = $_.Name.Split("/")
if ($contents.Length -gt 1 -and $contents[0] -notin $foldersToKeep) {
Write-Host "Deleting $($_.Name)"
Remove-AzStorageBlob -Container $container -Blob $_.Name -Context $storageContext
}
}
, которую вы также можете включить в функцию для повторного использования:
function Remove-AzureBlobsFromFolders {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]$Container,
[Parameter(Mandatory=$true)]
[string[]]$ExcludeFolders,
[Parameter(Mandatory=$true)]
[string]$StorageAccountName,
[Parameter(Mandatory=$true)]
[string]$StorageAccountKey
)
$storageContext = New-AzStorageContext `
-StorageAccountName $StorageAccountName `
-StorageAccountKey $StorageAccountKey
Get-AzStorageBlob -Context $storageContext -Container $Container -Blob * | ForEach-Object {
$contents = $_.Name.Split("/")
if ($contents.Length -gt 1 -and $contents[0] -notin $ExcludeFolders) {
Write-Host "Deleting $($_.Name)"
Remove-AzStorageBlob -Container $Container -Blob $_.Name -Context $storageContext
}
}
}
Remove-AzureBlobsFromFolders `
-Container "web" `
-ExcludeFolders "data", "cms" `
-StorageAccountName "STORAGE_ACCOUNT_NAME" `
-StorageAccountKey "STORAGE_ACCOUNT_KEY"