| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/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
|