【问题标题】:Azure CLI - az storage file delete-batch: pattern for all but one specific fileAzure CLI - az storage file delete-batch:除一个特定文件外的所有模式
【发布时间】:2021-10-28 23:59:45
【问题描述】:

我正在尝试从 Azure 存储文件共享中删除所有文件并排除一个特定文件名。我只是无法弄清楚模式。

我已经尝试过了,但现在模式不匹配任何东西。

az storage file delete-batch --source "https://myst.file.core.windows.net/myshare" --sas-token $sastoken --pattern "[!importantfile.py]"

【问题讨论】:

    标签: azure azure-storage azure-cli fnmatch


    【解决方案1】:

    您需要在单引号中添加pattern参数,如下所示

    az storage file delete-batch --source "https://myst.file.core.windows.net/myshare" --sas-token $sastoken --pattern '[!importantfile.py]*' 
    
    • 如果您在文件共享中有类似的文件,例如 (test.json.test1.json) ,请使用
      带有模式过滤器的 az storage delete-batch 无法排除特定文件的删除。

    • 参考az storage blob delete-batch中的SO线程如何使用pattern

    或者,如果希望在文件共享中排除删除特定文件,您可以使用以下 power shell 脚本

    connect-azaccount
    $accountName = '<accountname>';
    $accountKey = '<accountkey>';
    $myshare = '<file sharename >';
    $notremovalfile = '<file that need to be excluded from deletion>';
    
     $filelist = az storage file list -s $myshare --account-name $accountName --account-key $accountKey
    
        $fileArray = $filelist|ConvertFrom-Json 
    
    
        foreach ($file in $fileArray)
        {
           if($file.name -ne $notremovalfile)
           {
                Write-Host $file.name
                az storage file delete --account-name $accountName --account-key $accountKey -s $myshare -p $file.name
                Write-Host "deleting $file.name"
            }
              
    
        }  
    

    【讨论】: