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

我有许多包含.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
hhhhj2006 回答:在计算群集上运行许多sbatch .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(在某些情况下,如果目标目录是符号链接,则可能会失败)。 / p>

如果文件不需要在特定目录中运行,则可以简单地

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进入每个文件夹,则可以将其与第一个示例中的代码结合起来。

本文链接:https://www.f2er.com/3076882.html

大家都在问