运行 计算集群上有许多 sbatch .sh 文件

Run many sbatch .sh files on a computing cluster

我有很多包含.sh 文件的文件夹(如下所示)。我需要 运行 集群中的每一个。我需要有关如何将以下 sbatch 命令放入循环的帮助。

cd file1
sbatch run_min.sh
sbatch run_eqbr.sh 
sbatch run_prod.sh
cd ..



 cd file2
    sbatch run_min.sh
    sbatch run_eqbr.sh 
    sbatch run_prod.sh

文件夹结构

 folder1
     run_min.sh 
     run_eqbr.sh
     run_prod.sh

    folder2 
     run_min.sh
     run_eqbr.sh
     run_prod.sh

    folder3 
     run_min.sh
     run_eqbr.sh
     run_prod.sh

    folder4 
     run_min.sh
     run_eqbr.sh
     run_prod.sh

这有效。

for dir in */; 
do sbatch run_min.sh;
sbatch run_eqbr.sh
sbatch run_prod.sh ; done

试试这个。

for folder in ./*/; do
  ( cd "$folder"
    for file in ./*; do
      sbatch "$file"
    done )
done

括号导致 cd 等在子 shell 中变为 运行,因此您不必 cd 在每个之后返回(这在某些情况下可能会失败,当目标目录是符号链接)。

如果文件不需要 运行 在特定目录中,也许只是

for file in ./*/*; do
    sbatch "$file"
done

熟练编写的脚本不关心它们来自哪个目录 运行,但是当然,这些可以是简单的临时脚本,例如期望当前目录中存在特定的输入数据文件。

如果您不能 运行 所有目录中的所有文件,可以将通配符更改为 ./*/*.sh 或显式循环特定文件名:

for folder in ./*; do
  for name in min eqbr prod; do
    sbatch "$folder/run_$name.sh"
  done
done

同样,如果脚本要求您 cd 进入每个文件夹,您可以将其与第一个示例中的代码结合使用。