Storage blob delete-batch 删除所有 blob,不包括两个具有相似名称的目录
Storage blob delete-batch to delete all blobs excluding two directories with similar names
感谢 的回答,我已经走了很远,但我仍然遇到以下问题。我想删除文件夹 data
和 cms
以外的所有文件。
当前文件
- cms/a2907135_1800x900.jpg
- cms/c1964f4e_1800x900.jpg
- css/app.9e1921c7.css
- css/chunk-vendors.4bdbfeab.css
- css/pageContent.88886da1.css
- data/themes.json
- data/website.json
- data_old/downloads.json
- data_old/staff.json
- data_old/themes.json
- data_old/website.json
- img/flags.5fa419a7.png
- img/star/favicon.ico
- img/via/favicon.ico
- img/via/favicon.png
- img/via/mask-icon.svg
- img/via/touch-icon-ipad-retina.png
- img/via/touch-icon-ipad.png
- img/via/touch-icon-iphone-retina.png
- img/via/touch-icon-iphone.png
- index.html
- js/app.136c0496.js
- js/app.136c0496.js.map
- js/chunk-vendors.2dcffb72.js
- js/chunk-vendors.2dcffb72.js.map
- js/pageContent.55ebca01.js
- js/pageContent.55ebca01.js.map
- js/pageHome.e085832d.js
- js/pageHome.e085832d.js.map
- js/pageNotFound.e5d65257.js
- js/pageNotFound.e5d65257.js.map
- robots.txt
使用az storage blob delete-batch
删除模式为--pattern '[!data&&!cms]*'
的文件会导致删除以下文件
- img/flags.5fa419a7.png
- img/star/favicon.ico
- img/via/favicon.ico
- img/via/favicon.png
- img/via/mask-icon.svg
- img/via/touch-icon-ipad-retina.png
- img/via/touch-icon-ipad.png
- img/via/touch-icon-iphone-retina.png
- img/via/touch-icon-iphone.png
- index.html
- js/app.136c0496.js
- js/app.136c0496.js.map
- js/chunk-vendors.2dcffb72.js
- js/chunk-vendors.2dcffb72.js.map
- js/pageContent.55ebca01.js
- js/pageContent.55ebca01.js.map
- js/pageHome.e085832d.js
- js/pageHome.e085832d.js.map
- js/pageNotFound.e5d65257.js
- js/pageNotFound.e5d65257.js.map
- robots.txt
文件夹data_old
和css
没有被删除。这可能是因为使用了 []
(通常是 glob as or),所以 data_old
和 css
是匹配的。但是我怎样才能删除它们呢?我试过 --pattern '(!data&&!cms)*'
和 --pattern '!data&&!cms*'
都没有成功。
对于 az storage blob delete-batch
. The supported patterns are limited to '*'
, '?'
, '[seq]'
, and '[!seq]'
, which are found at Pythons fnmatch 模块来说,这可能是一项艰巨的任务,而且对于您的用例来说可能还不够。
相反,您可以编写一个 Azure PowerShell script to do this for you. There are alot of handy Az.Storage 管理 cmdlet 来执行此任务。
演示:
$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"
感谢 data
和 cms
以外的所有文件。
当前文件
- cms/a2907135_1800x900.jpg
- cms/c1964f4e_1800x900.jpg
- css/app.9e1921c7.css
- css/chunk-vendors.4bdbfeab.css
- css/pageContent.88886da1.css
- data/themes.json
- data/website.json
- data_old/downloads.json
- data_old/staff.json
- data_old/themes.json
- data_old/website.json
- img/flags.5fa419a7.png
- img/star/favicon.ico
- img/via/favicon.ico
- img/via/favicon.png
- img/via/mask-icon.svg
- img/via/touch-icon-ipad-retina.png
- img/via/touch-icon-ipad.png
- img/via/touch-icon-iphone-retina.png
- img/via/touch-icon-iphone.png
- index.html
- js/app.136c0496.js
- js/app.136c0496.js.map
- js/chunk-vendors.2dcffb72.js
- js/chunk-vendors.2dcffb72.js.map
- js/pageContent.55ebca01.js
- js/pageContent.55ebca01.js.map
- js/pageHome.e085832d.js
- js/pageHome.e085832d.js.map
- js/pageNotFound.e5d65257.js
- js/pageNotFound.e5d65257.js.map
- robots.txt
使用az storage blob delete-batch
删除模式为--pattern '[!data&&!cms]*'
的文件会导致删除以下文件
- img/flags.5fa419a7.png
- img/star/favicon.ico
- img/via/favicon.ico
- img/via/favicon.png
- img/via/mask-icon.svg
- img/via/touch-icon-ipad-retina.png
- img/via/touch-icon-ipad.png
- img/via/touch-icon-iphone-retina.png
- img/via/touch-icon-iphone.png
- index.html
- js/app.136c0496.js
- js/app.136c0496.js.map
- js/chunk-vendors.2dcffb72.js
- js/chunk-vendors.2dcffb72.js.map
- js/pageContent.55ebca01.js
- js/pageContent.55ebca01.js.map
- js/pageHome.e085832d.js
- js/pageHome.e085832d.js.map
- js/pageNotFound.e5d65257.js
- js/pageNotFound.e5d65257.js.map
- robots.txt
文件夹data_old
和css
没有被删除。这可能是因为使用了 []
(通常是 glob as or),所以 data_old
和 css
是匹配的。但是我怎样才能删除它们呢?我试过 --pattern '(!data&&!cms)*'
和 --pattern '!data&&!cms*'
都没有成功。
对于 az storage blob delete-batch
. The supported patterns are limited to '*'
, '?'
, '[seq]'
, and '[!seq]'
, which are found at Pythons fnmatch 模块来说,这可能是一项艰巨的任务,而且对于您的用例来说可能还不够。
相反,您可以编写一个 Azure PowerShell script to do this for you. There are alot of handy Az.Storage 管理 cmdlet 来执行此任务。
演示:
$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"