【问题标题】:Storage blob delete-batch to delete all blobs excluding two directories with similar names存储 blob delete-batch 删除所有 blob,不包括具有相似名称的两个目录
【发布时间】:2020-06-28 14:22:10
【问题描述】:

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

【问题讨论】:

    标签: azure powershell azure-blob-storage glob azure-cli


    【解决方案1】:

    这对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"
    

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 2012-04-26
      • 2021-04-26
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2020-04-09
      相关资源
      最近更新 更多