#!/bin/bash # 批量执行脚本工具 # 用法: ./run_batch.sh <父目录> <脚本1.py> [脚本2.py] [脚本3.py] ... # 示例: ./run_batch.sh input sug_v2.py sug_v3.py set -e # 遇到错误立即退出 # 检查参数数量 if [ $# -lt 2 ]; then echo "用法: $0 <父目录> <脚本1.py> [脚本2.py] ..." echo "示例: $0 input sug_v2.py sug_v3.py" exit 1 fi # 获取父目录 PARENT_DIR="$1" shift # 移除第一个参数,剩下的都是py脚本 # 获取所有py脚本 PY_SCRIPTS=("$@") # 检查父目录是否存在 if [ ! -d "$PARENT_DIR" ]; then echo "错误: 父目录 '$PARENT_DIR' 不存在" exit 1 fi # 检查所有py脚本是否存在 for script in "${PY_SCRIPTS[@]}"; do if [ ! -f "$script" ]; then echo "错误: 脚本 '$script' 不存在" exit 1 fi done # 获取父目录下的所有子目录 echo "=========================================" echo "开始批量执行" echo "父目录: $PARENT_DIR" echo "脚本列表: ${PY_SCRIPTS[*]}" echo "=========================================" echo "" # 统计信息 total_tasks=0 success_tasks=0 failed_tasks=0 # 遍历父目录下的所有子目录 for subdir in "$PARENT_DIR"/*/; do # 移除末尾的斜杠 subdir="${subdir%/}" # 检查是否是目录 if [ ! -d "$subdir" ]; then continue fi # 获取子目录名称 subdir_name=$(basename "$subdir") echo "----------------------------------------" echo "处理子目录: $subdir" echo "----------------------------------------" # 对每个py脚本执行 for script in "${PY_SCRIPTS[@]}"; do total_tasks=$((total_tasks + 1)) echo "" echo "[任务 $total_tasks] 执行: python $script --input-dir $subdir" echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')" # 执行脚本,捕获错误 if python "$script" --input-dir "$subdir"; then success_tasks=$((success_tasks + 1)) echo "✓ 成功" else failed_tasks=$((failed_tasks + 1)) echo "✗ 失败" # 继续执行其他任务,不退出 fi echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" done done # 输出统计信息 echo "=========================================" echo "批量执行完成" echo "=========================================" echo "总任务数: $total_tasks" echo "成功: $success_tasks" echo "失败: $failed_tasks" echo "=========================================" # 如果有失败的任务,返回非零退出码 if [ $failed_tasks -gt 0 ]; then exit 1 fi