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

如何批量读取多目录JSON文件压缩后回写至对应原文件

问题原因

你当前使用的命令只会将所有匹配到的JSON文件内容拼接后,统一压缩输出到终端标准输出,既不会将处理结果按原文件拆分,也没有回写原文件的逻辑,因此无法实现预期效果。

可行解决方案

方案1:单文件独立处理(兼容性最好)

直接通过find的exec参数对每个文件单独处理,核心是要先输出到临时文件再覆盖原文件,避免直接重定向清空原文件导致内容丢失:

find . -type f -name '*.json' -exec bash -c 'jq -c "." "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \;

方案2:批量高效处理(适合文件数量多的场景)

配合xargs减少进程创建开销,同时使用-print0和-0参数兼容带空格、特殊字符的文件名:

find . -type f -name '*.json' -print0 | xargs -0 -I {} bash -c 'jq -c "." "{}" > "{}.tmp" && mv "{}.tmp" "{}"'

注意事项

  • 担心操作失误损坏原文件的话,可以增加备份逻辑,处理前先把原文件备份为.bak后缀:
    find . -type f -name '*.json' -exec bash -c 'cp "$1" "$1.bak" && jq -c "." "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \;
    
    需要恢复备份时执行以下命令即可:
    find . -name '*.json.bak' -exec bash -c 'mv "$1" "${1%.bak}"' _ {} \;
    
  • 正式回写前可以先执行以下命令预览处理结果,确认所有JSON格式合法、输出符合预期后再执行回写操作:
    find . -type f -name '*.json' -exec echo "处理文件:{}" \; -exec jq -c "." {} \;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:00:02