Bash脚本问题:删除Azure存储非mf开头Blob时误删全部文件
问题:Azure存储Blob批量删除脚本错误排查与修复
需求:从Azure存储账户的$web容器获取Blob列表,删除所有不以mf开头的文件。
原脚本:
blob=$(az storage blob list -c '$web' --account-name "$SA_NAME" --query "[].{name:name}" --output tsv) prefix="mf" for b in $blob do if [[ "$blob" == "$prefix"* ]]; then echo "file $b: is not deleted" else echo "file $b: is deleted" fi done
执行后异常输出:所有文件(包括mf开头的)都被标记为删除。
错误原因
脚本中if判断的是整个Blob列表变量$blob是否以mf开头,而非当前循环的单个Blob名称$b。由于$blob是所有Blob名称的集合,不可能匹配mf前缀,导致所有条目都进入else分支。
修正后的脚本
将判断条件中的$blob替换为$b,同时优化循环逻辑以兼容含空格的文件名:
prefix="mf" az storage blob list -c '$web' --account-name "$SA_NAME" --query "[].{name:name}" --output tsv | while read -r b do if [[ "$b" == "$prefix"* ]]; then echo "file $b: 保留(不删除)" else echo "file $b: 执行删除" # 取消注释下方命令以实际执行删除操作 # az storage blob delete -c '$web' --account-name "$SA_NAME" --name "$b" fi done
说明
- 改用管道+
while read循环处理,避免文件名含空格时被错误拆分 - 判断条件修正为检查当前Blob名称
$b是否以mf开头 - 实际删除时取消注释
az storage blob delete命令即可
内容的提问来源于stack exchange,提问作者cekodis681 cekodis681
相关产品推荐
相关产品推荐

