运行 计算集群上有许多 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
进入每个文件夹,您可以将其与第一个示例中的代码结合使用。
我有很多包含.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
进入每个文件夹,您可以将其与第一个示例中的代码结合使用。