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

Bash对比远端JSON与本地YML,按差异对应ID动态执行删除操作

实现方案

核心逻辑

你已经拿到了接口存在但本地不存在的差异name列表,接下来只需要缓存远程接口的完整响应,遍历差异列表匹配对应id执行删除即可,避免重复发起GET请求。

完整可运行代码

declare -a arr=(_a _b _c)
# 解析本地yml获取名称列表
ar=$(grep name files.yml | cut -d '"' -f2 | tr "\n" " ")
fileItemArray=($ar)
ARR_PRE=("${fileItemArray[@]/#/V1_}")
for i in "${arr[@]}"; do local_var+=("${ARR_PRE[@]/%/$i}"); done

# 缓存远程接口完整响应,避免重复请求
remote_data=$(curl -sX GET "你的GET接口地址XXXX")
# 提取远程所有name
remote_var=$(echo "$remote_data" | jq -r '.[].name')

# 计算差异:仅远程存在的name
diff_=$(echo -e "${local_var[@]// /\\n}\n${remote_var// /\\n}" | sort | uniq -u)

# 遍历差异项执行删除
if [ -n "$diff_" ]; then
  for del_name in $diff_; do
    # 匹配差异name对应的id
    del_id=$(echo "$remote_data" | jq -r --arg name "$del_name" '.[] | select(.name == $name) .id')
    if [ -n "$del_id" ] && [ "$del_id" != "null" ]; then
      echo "正在删除条目: $del_name, id: $del_id"
      # 替换为你的实际DELETE接口地址,一般是接口路径拼接id
      curl -X DELETE "你的DELETE接口地址XXXX/$del_id"
    fi
  done
else
  echo "无差异条目,无需删除"
fi

注意事项

  • 正式执行前可以先注释掉curl -X DELETE行,先运行脚本打印要删除的name和id,确认匹配逻辑无误后再打开删除逻辑,避免误删数据
  • 如果本地files.yml结构后续会调整,建议用专门的yaml解析工具yq替代grep切割,解析逻辑更稳定,比如用yq e '.instance[] | .name' files.yml就能直接提取所有name值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:08