#!/bin/bash # 后端源代码简单拼接脚本 # 功能:将所有后端源代码文件简单拼接成一个文本文件,避免AI处理时消耗大量token # # 支持文件类型: # - Java文件 (.java, .jsp, .xml) # - Python文件 (.py) # - C#/.NET文件 (.cs, .csproj, .sln) # - Node.js文件 (.js, .ts, .mjs) # - PHP文件 (.php) # - Go文件 (.go, .mod) # - 配置文件 (.json, .yml, .yaml, .xml, .properties) # - 构建文件 (pom.xml, package.json, requirements.txt, Dockerfile) # - 其他文件 (.txt, .md, .cfg, .ini, .conf, .env) echo "🔄 开始拼接后端源代码..." # 设置路径 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" BACKEND_DIR="${SCRIPT_DIR}/output_sourcecode/backend" OUTPUT_DIR="${SCRIPT_DIR}/output_docs" OUTPUT_FILE="${OUTPUT_DIR}/后端源代码.txt" # 确保输出目录存在 mkdir -p "${OUTPUT_DIR}" # 检查后端目录 if [ ! -d "${BACKEND_DIR}" ]; then echo "❌ 后端目录不存在: ${BACKEND_DIR}" echo "💡 请先生成后端源代码文件" exit 1 fi # 定义后端源代码文件扩展名 BACKEND_EXTENSIONS=( # Java相关 "*.java" "*.jsp" "*.xml" # Python相关 "*.py" # C#/.NET相关 "*.cs" "*.csproj" "*.sln" # Node.js相关 "*.js" "*.ts" "*.mjs" # PHP相关 "*.php" # Go相关 "*.go" "*.mod" # 配置文件 "*.json" "*.yml" "*.yaml" "*.properties" # 构建和部署文件 "pom.xml" "package.json" "requirements.txt" "Dockerfile" "docker-compose.yml" # 其他文件 "*.txt" "*.md" "*.cfg" "*.ini" "*.conf" "*.env" ) # 查找所有后端源代码文件 BACKEND_FILES=() for ext in "${BACKEND_EXTENSIONS[@]}"; do while IFS= read -r -d '' file; do BACKEND_FILES+=("$file") done < <(find "${BACKEND_DIR}" -name "$ext" -type f -print0 | sort -z) done if [ ${#BACKEND_FILES[@]} -eq 0 ]; then echo "❌ 未找到后端源代码文件" echo "💡 请检查 ${BACKEND_DIR} 目录" echo "💡 支持的文件类型: ${BACKEND_EXTENSIONS[*]}" exit 1 fi echo "📁 找到 ${#BACKEND_FILES[@]} 个后端源代码文件" # 清空输出文件 > "${OUTPUT_FILE}" # 清空输出文件(不添加头部信息,保持纯代码格式) # 拼接所有后端文件 counter=1 for file in "${BACKEND_FILES[@]}"; do relative_path="${file#$BACKEND_DIR/}" filename=$(basename "$file") extension="${filename##*.}" echo "📄 处理 ($counter/${#BACKEND_FILES[@]}): $relative_path" # 根据文件类型设置注释格式(处理特殊文件名) if [[ "$filename" == "Dockerfile"* ]] || [[ "$filename" == "docker-compose"* ]]; then comment_prefix="#" elif [[ "$filename" == "pom.xml" ]] || [[ "$filename" == "package.json" ]] || [[ "$filename" == "requirements.txt" ]]; then case "$extension" in "xml") comment_prefix="