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

Bash脚本遍历JSON文件判断内容为空问题排查

Bash脚本遍历JSON文件并判断内容为空的错误排查与修复

问题场景

需求是遍历/inputs/resource/*/路径下的所有JSON文件,逐个判断文件内容是否为空,但现有脚本运行时未逐个遍历文件,且误判有内容的文件为空,终端输出所有文件名后直接提示“JSON file is empty.”并退出。

原脚本代码:

#!/bin/bash

file_json=$(find /inputs/resource/*/*.json | awk -F'/' '{ print $(NF) }' | sort -n)

echo "Checking JSON file content."
for file in "$file_json"; do
    echo "$file"
    if [[ ! -s "file" ]]; then
        echo "JSON file is empty."
        exit
    fi
        echo "JSON file is not empty."
done

终端输出:

Checking JSON file content.
xpm1.json
xpm2.json
xpm3.json
JSON file is empty.

错误分析

  1. 未逐个遍历文件:

    • file_json=$(find ...)将所有文件名拼接成单个字符串,for file in "$file_json"会把整个字符串当作一个循环项,导致一次输出所有文件名,而非逐个处理。
    • 用awk提取文件名时丢失了文件的完整路径,后续判断时无法定位到实际文件。
  2. 误判文件为空并提前退出:

    • [[ ! -s "file" ]]中的file是固定字符串,而非变量引用,正确写法应为[[ ! -s "$file" ]]。
    • 由于丢失了文件路径,脚本会在当前目录查找名为file的文件(不存在),所以-s判断始终为真,触发错误提示。
    • exit会直接终止脚本,导致后续文件未被检查。

修复后的脚本

#!/bin/bash

# 直接用glob匹配目标路径下的JSON文件,排序后逐个遍历
files=(/inputs/resource/*/*.json)
IFS=$'\n' sorted_files=($(sort -n <<<"${files[*]}"))
unset IFS

echo "开始检查JSON文件内容"
for file in "${sorted_files[@]}"; do
    echo "当前检查: $file"
    if [[ ! -s "$file" ]]; then
        echo "$file 内容为空"
        # exit 1  # 按需决定是否在发现空文件时终止脚本
    else
        echo "$file 内容不为空"
    fi
done

修复说明

  • 保留文件的完整路径,确保-s能正确判断目标文件的内容是否为空。
  • 用正确的变量引用"$file"替代字符串file。
  • 采用数组存储文件路径并排序,实现逐个遍历处理。
  • 可根据需求选择是否保留exit,决定是否在发现空文件时终止脚本。

内容的提问来源于stack exchange,提问作者生きがい

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:50:01