如何通过Azure CLI在Azure DevOps流水线删除存储容器指定文件夹内容?
解决Azure CLI删除存储容器指定文件夹内容的问题
问题原因
你使用的--pattern '*[/3.0.0/]*'匹配逻辑错误,该模式会匹配所有路径中包含/3.0.0/片段的blob,再加上shell对通配符的解析干扰,最终导致误删容器内所有文件。
正确解决方案
要精准删除Documents/3.0.0/下的所有子文件夹和文件,推荐以下两种可靠方式:
方式一:使用前缀匹配(最安全)
利用--prefix参数指定目标路径前缀,这是Azure CLI批量删除blob最稳妥的方式,不会出现通配符匹配偏差:
az storage blob delete-batch --account-name $account --source $container --prefix "Documents/3.0.0/" --connection-string $conn-str
方式二:修正glob模式匹配
如果坚持使用--pattern,需要使用符合Azure存储glob规则的模式,匹配Documents/3.0.0/下的所有层级内容:
az storage blob delete-batch --account-name $account --source $container --pattern "Documents/3.0.0/**" --connection-string $conn-str
其中**表示跨层级匹配该路径下的所有文件和子目录。
原命令错误细节
原命令的问题在于:
- 开头的
*会匹配任意前缀,若存在其他路径包含/3.0.0/片段(哪怕当前结构没有,逻辑上仍有风险),都会被误匹配; - Azure存储的glob模式中,
*仅匹配单个路径段的任意字符,**才支持跨层级递归匹配,原模式未限定起始路径,加上shell对[]的解析干扰,最终导致匹配范围失控。
内容的提问来源于stack exchange,提问作者Nopesound
相关产品推荐
相关产品推荐

