gpt4 book ai didi

azure - 存储 blob 删除批量删除除两个具有相似名称的目录之外的所有 blob

转载 作者:行者123 更新时间:2023-12-03 02:41:57 26 4
gpt4 key购买 nike

感谢@Jim Xu的回答我已经走了很远,但我仍然面临以下问题。我想删除除 datacms 文件夹中的所有文件。

当前文件

  - 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_oldcss不会被删除。这可能是因为使用了 [] (通常为 or 的通配符),因此 data_oldcss 是匹配的。但我怎样才能删除它们呢?我尝试过 --pattern '(!data&&!cms)*'--pattern '!data&&!cms*' 但没有成功。

最佳答案

对于 az storage blob delete-batch 来说,这可能是一项艰巨的任务。 。支持的模式仅限于 '*''?''[seq]''[!seq] ',可在 Pythons fnmatch 中找到。模块,并且可能不足以满足您的用例。

相反,您可以写 Azure PowerShell脚本来为您执行此操作。有很多方便的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"

关于azure - 存储 blob 删除批量删除除两个具有相似名称的目录之外的所有 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60723475/

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