run_batch.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/bin/bash
  2. # 批量执行脚本工具
  3. # 用法: ./run_batch.sh <父目录> <脚本1.py> [脚本2.py] [脚本3.py] ...
  4. # 示例: ./run_batch.sh input sug_v2.py sug_v3.py
  5. set -e # 遇到错误立即退出
  6. # 检查参数数量
  7. if [ $# -lt 2 ]; then
  8. echo "用法: $0 <父目录> <脚本1.py> [脚本2.py] ..."
  9. echo "示例: $0 input sug_v2.py sug_v3.py"
  10. exit 1
  11. fi
  12. # 获取父目录
  13. PARENT_DIR="$1"
  14. shift # 移除第一个参数,剩下的都是py脚本
  15. # 获取所有py脚本
  16. PY_SCRIPTS=("$@")
  17. # 检查父目录是否存在
  18. if [ ! -d "$PARENT_DIR" ]; then
  19. echo "错误: 父目录 '$PARENT_DIR' 不存在"
  20. exit 1
  21. fi
  22. # 检查所有py脚本是否存在
  23. for script in "${PY_SCRIPTS[@]}"; do
  24. if [ ! -f "$script" ]; then
  25. echo "错误: 脚本 '$script' 不存在"
  26. exit 1
  27. fi
  28. done
  29. # 获取父目录下的所有子目录
  30. echo "========================================="
  31. echo "开始批量执行"
  32. echo "父目录: $PARENT_DIR"
  33. echo "脚本列表: ${PY_SCRIPTS[*]}"
  34. echo "========================================="
  35. echo ""
  36. # 统计信息
  37. total_tasks=0
  38. success_tasks=0
  39. failed_tasks=0
  40. # 遍历父目录下的所有子目录
  41. for subdir in "$PARENT_DIR"/*/; do
  42. # 移除末尾的斜杠
  43. subdir="${subdir%/}"
  44. # 检查是否是目录
  45. if [ ! -d "$subdir" ]; then
  46. continue
  47. fi
  48. # 获取子目录名称
  49. subdir_name=$(basename "$subdir")
  50. echo "----------------------------------------"
  51. echo "处理子目录: $subdir"
  52. echo "----------------------------------------"
  53. # 对每个py脚本执行
  54. for script in "${PY_SCRIPTS[@]}"; do
  55. total_tasks=$((total_tasks + 1))
  56. echo ""
  57. echo "[任务 $total_tasks] 执行: python $script --input-dir $subdir"
  58. echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
  59. # 执行脚本,捕获错误
  60. if python "$script" --input-dir "$subdir"; then
  61. success_tasks=$((success_tasks + 1))
  62. echo "✓ 成功"
  63. else
  64. failed_tasks=$((failed_tasks + 1))
  65. echo "✗ 失败"
  66. # 继续执行其他任务,不退出
  67. fi
  68. echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
  69. echo ""
  70. done
  71. done
  72. # 输出统计信息
  73. echo "========================================="
  74. echo "批量执行完成"
  75. echo "========================================="
  76. echo "总任务数: $total_tasks"
  77. echo "成功: $success_tasks"
  78. echo "失败: $failed_tasks"
  79. echo "========================================="
  80. # 如果有失败的任务,返回非零退出码
  81. if [ $failed_tasks -gt 0 ]; then
  82. exit 1
  83. fi