将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
发表回复