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

如何使用bash脚本跨目录导出指定目录.txt文件信息为JSON文件

Bash脚本实现生成目录A下txt文件信息的JSON

方案1:使用jq生成合规JSON(推荐)

该方案依赖轻量JSON处理工具jq,可自动处理特殊字符,生成的JSON无语法问题,适合生产环境使用。
安装jq参考:

  • Debian/Ubuntu 执行:sudo apt install jq
  • macOS 执行:brew install jq

脚本内容

#!/bin/bash
# 请修改以下两个路径为你的实际路径
DIR_A="/absolute/path/to/directory/A"
OUTPUT_JSON="/absolute/path/to/save/result.json"

# 如需固定从目录B执行,取消注释下一行并修改为目录B的路径
# cd /absolute/path/to/directory/B

# 查找所有txt文件并生成JSON
find "$DIR_A" -type f -name "*.txt" | jq -n '
{
  "txt_file_list": [
    inputs | {
      "file_name": split("/")[-1],
      "storage_path": .
    }
  ]
}' > "$OUTPUT_JSON"

输出JSON示例

{
  "txt_file_list": [
    {
      "file_name": "data1.txt",
      "storage_path": "/data/dirA/data1.txt"
    },
    {
      "file_name": "data2.txt",
      "storage_path": "/data/dirA/sub/data2.txt"
    }
  ]
}

方案2:原生Bash实现(无外部依赖)

如果环境无法安装jq,可以用原生Bash实现,默认已处理文件名带空格、双引号的场景:

#!/bin/bash
DIR_A="/absolute/path/to/directory/A"
OUTPUT_JSON="/absolute/path/to/save/result.json"

# 初始化JSON结构
echo '{"txt_file_list": [' > "$OUTPUT_JSON"
first_entry=1

# 遍历所有txt文件
while IFS= read -r -d '' file_path; do
  if [ $first_entry -ne 1 ]; then
    echo "," >> "$OUTPUT_JSON"
  fi
  first_entry=0
  file_name="${file_path##*/}"
  # 转义特殊字符
  esc_path="${file_path//\"/\\\"}"
  esc_name="${file_name//\"/\\\"}"
  printf '  {"file_name":"%s","storage_path":"%s"}' "$esc_name" "$esc_path" >> "$OUTPUT_JSON"
done < <(find "$DIR_A" -type f -name "*.txt" -print0)

# 闭合JSON结构
echo -e "\n]}" >> "$OUTPUT_JSON"

常见调整项

  • 不需要递归查找子目录:给find命令添加-maxdepth 1参数,放在-type f前面即可
  • 存储相对目录A的路径:将storage_path的取值替换为${file_path#$DIR_A/}
  • 脚本执行前需确认对目录A有读权限,对JSON输出目录有写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:03