json格式化脚本

·

将1个tab转换为2个空格。支持单文件和文件夹输入。

#!/bin/ash

# 检查是否输入了参数
if [ -z "$1" ]; then
    echo "错误: 请指定目标文件或目录!"
    echo "用法: $0 /path/to/file.json  或  $0 /path/to/directory"
    exit 1
fi

TARGET="$1"

# 检查是否安装了 jq
if ! command -v jq > /dev/null 2>&1; then
    echo "错误: 系统未安装 jq,请先安装(OpenWrt 请运行: opkg update && opkg install jq)"
    exit 1
fi

# 核心格式化函数
format_single_json() {
    local json_file="$1"
    local tmp_file="${json_file}.tmp"
    
    if jq --indent 2 '.' "$json_file" > "$tmp_file" 2>/dev/null; then
        mv "$tmp_file" "$json_file"
        echo "✅ 已格式化: $json_file"
    else
        rm -f "$tmp_file"
        echo "❌ 失败 (语法错误): $json_file"
    fi
}

# --- 逻辑判断分流 ---

if [ -f "$TARGET" ]; then
    # 情况一:指定的是具体文件
    echo "正在格式化单个文件: $TARGET ..."
    format_single_json "$TARGET"

elif [ -d "$TARGET" ]; then
    # 情况二:指定的是目录,弹出交互提示
    echo "⚠️  警告: 你输入的是一个目录 [$TARGET]"
    printf "将修改该目录内所有的 .json 文件格式,是否继续?(y/N): "
    read -r CONFIRM
    
    case "$CONFIRM" in
        [yY]|[yY][eE][sS])
            echo "--------------------------------------------------"
            echo "开始处理目录下的所有 JSON 文件..."
            
            # 使用 find 查找并处理
            find "$TARGET" -type f -name "*.json" | while read -r json_file; do
                format_single_json "$json_file"
            done
            
            echo "--------------------------------------------------"
            echo "✨ 目录内所有 JSON 文件处理完毕!"
            ;;
        *)
            echo "❌ 操作已取消。"
            exit 0
            ;;
    esac

else
    echo "错误: [$TARGET] 不是有效的路径或文件不存在!"
    exit 1
fi

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注