merge_backend_simple.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #!/bin/bash
  2. # 后端源代码简单拼接脚本
  3. # 功能:将所有后端源代码文件简单拼接成一个文本文件,避免AI处理时消耗大量token
  4. #
  5. # 支持文件类型:
  6. # - Java文件 (.java, .jsp, .xml)
  7. # - Python文件 (.py)
  8. # - C#/.NET文件 (.cs, .csproj, .sln)
  9. # - Node.js文件 (.js, .ts, .mjs)
  10. # - PHP文件 (.php)
  11. # - Go文件 (.go, .mod)
  12. # - 配置文件 (.json, .yml, .yaml, .xml, .properties)
  13. # - 构建文件 (pom.xml, package.json, requirements.txt, Dockerfile)
  14. # - 其他文件 (.txt, .md, .cfg, .ini, .conf, .env)
  15. echo "🔄 开始拼接后端源代码..."
  16. # 设置路径
  17. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
  18. BACKEND_DIR="${SCRIPT_DIR}/output_sourcecode/backend"
  19. OUTPUT_DIR="${SCRIPT_DIR}/output_docs"
  20. OUTPUT_FILE="${OUTPUT_DIR}/后端源代码.txt"
  21. # 确保输出目录存在
  22. mkdir -p "${OUTPUT_DIR}"
  23. # 检查后端目录
  24. if [ ! -d "${BACKEND_DIR}" ]; then
  25. echo "❌ 后端目录不存在: ${BACKEND_DIR}"
  26. echo "💡 请先生成后端源代码文件"
  27. exit 1
  28. fi
  29. # 定义后端源代码文件扩展名
  30. BACKEND_EXTENSIONS=(
  31. # Java相关
  32. "*.java" "*.jsp" "*.xml"
  33. # Python相关
  34. "*.py"
  35. # C#/.NET相关
  36. "*.cs" "*.csproj" "*.sln"
  37. # Node.js相关
  38. "*.js" "*.ts" "*.mjs"
  39. # PHP相关
  40. "*.php"
  41. # Go相关
  42. "*.go" "*.mod"
  43. # 配置文件
  44. "*.json" "*.yml" "*.yaml" "*.properties"
  45. # 构建和部署文件
  46. "pom.xml" "package.json" "requirements.txt" "Dockerfile" "docker-compose.yml"
  47. # 其他文件
  48. "*.txt" "*.md" "*.cfg" "*.ini" "*.conf" "*.env"
  49. )
  50. # 查找所有后端源代码文件
  51. BACKEND_FILES=()
  52. for ext in "${BACKEND_EXTENSIONS[@]}"; do
  53. while IFS= read -r -d '' file; do
  54. BACKEND_FILES+=("$file")
  55. done < <(find "${BACKEND_DIR}" -name "$ext" -type f -print0 | sort -z)
  56. done
  57. if [ ${#BACKEND_FILES[@]} -eq 0 ]; then
  58. echo "❌ 未找到后端源代码文件"
  59. echo "💡 请检查 ${BACKEND_DIR} 目录"
  60. echo "💡 支持的文件类型: ${BACKEND_EXTENSIONS[*]}"
  61. exit 1
  62. fi
  63. echo "📁 找到 ${#BACKEND_FILES[@]} 个后端源代码文件"
  64. # 清空输出文件
  65. > "${OUTPUT_FILE}"
  66. # 清空输出文件(不添加头部信息,保持纯代码格式)
  67. # 拼接所有后端文件
  68. counter=1
  69. for file in "${BACKEND_FILES[@]}"; do
  70. relative_path="${file#$BACKEND_DIR/}"
  71. filename=$(basename "$file")
  72. extension="${filename##*.}"
  73. echo "📄 处理 ($counter/${#BACKEND_FILES[@]}): $relative_path"
  74. # 根据文件类型设置注释格式(处理特殊文件名)
  75. if [[ "$filename" == "Dockerfile"* ]] || [[ "$filename" == "docker-compose"* ]]; then
  76. comment_prefix="#"
  77. elif [[ "$filename" == "pom.xml" ]] || [[ "$filename" == "package.json" ]] || [[ "$filename" == "requirements.txt" ]]; then
  78. case "$extension" in
  79. "xml") comment_prefix="<!--" ;;
  80. "json") comment_prefix="//" ;;
  81. "txt") comment_prefix="#" ;;
  82. esac
  83. else
  84. case "$extension" in
  85. # C风格语言和JSON
  86. "java"|"js"|"ts"|"mjs"|"cs"|"php"|"json")
  87. comment_prefix="//"
  88. ;;
  89. # XML类文件
  90. "xml"|"jsp"|"csproj"|"sln")
  91. comment_prefix="<!--"
  92. ;;
  93. # Shell风格注释
  94. "py"|"yml"|"yaml"|"cfg"|"ini"|"conf"|"env"|"properties")
  95. comment_prefix="#"
  96. ;;
  97. # Go语言
  98. "go"|"mod")
  99. comment_prefix="//"
  100. ;;
  101. # 其他文件默认使用#
  102. *)
  103. comment_prefix="#"
  104. ;;
  105. esac
  106. fi
  107. # 添加文件分隔符
  108. cat >> "${OUTPUT_FILE}" << EOF
  109. $comment_prefix ================= $relative_path =================
  110. EOF
  111. # 直接追加文件内容
  112. if [ -r "$file" ]; then
  113. cat "$file" >> "${OUTPUT_FILE}"
  114. else
  115. echo "$comment_prefix 无法读取文件: $relative_path" >> "${OUTPUT_FILE}"
  116. fi
  117. # 添加文件结束分隔符
  118. cat >> "${OUTPUT_FILE}" << EOF
  119. $comment_prefix ================= $relative_path 结束 =================
  120. EOF
  121. ((counter++))
  122. done
  123. # 显示结果
  124. if [ -f "${OUTPUT_FILE}" ]; then
  125. file_size=$(wc -c < "${OUTPUT_FILE}")
  126. line_count=$(wc -l < "${OUTPUT_FILE}")
  127. echo "✅ 拼接完成!"
  128. echo "📁 输出文件: ${OUTPUT_FILE}"
  129. # 兼容性处理文件大小显示
  130. if [ $file_size -gt 1048576 ]; then
  131. size_str="$(awk "BEGIN {printf \"%.1f MB\", $file_size/1048576}")"
  132. elif [ $file_size -gt 1024 ]; then
  133. size_str="$(awk "BEGIN {printf \"%.1f KB\", $file_size/1024}")"
  134. else
  135. size_str="${file_size} bytes"
  136. fi
  137. echo "📊 文件大小: ${size_str}"
  138. echo "📋 总行数: $line_count"
  139. else
  140. echo "❌ 生成失败"
  141. exit 1
  142. fi