You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

说明

  1. 改用管道+while read循环处理,避免文件名含空格时被错误拆分
  2. 判断条件修正为检查当前Blob名称$b是否以mf开头
  3. 实际删除时取消注释az storage blob delete命令即可

内容的提问来源于stack exchange,提问作者cekodis681 cekodis681

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:33:33