如何生成不同的脚本以在linux中的每个目录上运行?

如何生成不同的脚本以在linux中的每个目录上运行?,linux,bash,shell,slurm,sbatch,Linux,Bash,Shell,Slurm,Sbatch,我有一个目录main,其中大约有100个目录。例如,它如下所示: main |__ test_1to50000 |__ test_50001to60000 |__ test_60001to70000 |__ test_70001to80000 |__ test1.sh 我有一个sbatch脚本test1.sh在第一个目录上运行 #!/bin/bash #SBATCH --job-name=sbatchJob #SBATCH --cpus-per-task=16

我有一个目录
main
,其中大约有100个目录。例如,它如下所示:

main
 |__ test_1to50000
 |__ test_50001to60000
 |__ test_60001to70000
 |__ test_70001to80000
 |__ test1.sh
我有一个sbatch脚本
test1.sh
在第一个目录上运行

#!/bin/bash

#SBATCH --job-name=sbatchJob   
#SBATCH --cpus-per-task=16       
#SBATCH --mem-per-cpu=8G    
#SBATCH --time=1-00:00:00
#SBATCH --qos=1day
if [ -f ~/.bashrc ] ; then
    . ~/.bashrc
fi

module load Perl/5.28.0-GCCcore-8.2.0

perl path/to/software --cpu 16 --run /path/to/test_1to50000 command /path/to/test_1to50000/software.`date +"%m_%d_%y_%H-%M-%S"`.log

我有100个目录,所以我想为每个目录创建每个脚本并提交脚本。如何为上述所有其他目录生成
sbatch脚本

您最好的选择是将a与以下脚本一起使用:

#!/bin/bash
#SBATCH --array=0-3   # 3 == number of dirs - 1
#SBATCH --job-name=sbatchJob   
#SBATCH --cpus-per-task=16       
#SBATCH --mem-per-cpu=8G    
#SBATCH --time=1-00:00:00
#SBATCH --qos=1day
if [ -f ~/.bashrc ] ; then
    . ~/.bashrc
fi

module load Perl/5.28.0-GCCcore-8.2.0
DIRS=(main/*/)    # This array will hold all directories
CURRDIR="${DIRS[$SLURM_ARRAY_TASK_ID]}" # This is the directory taken care of by the current job

perl path/to/software --cpu 16 --run "$CURRDIR" command "$CURRDIR"/software.`date +"%m_%d_%y_%H-%M-%S"`.log

这将创建一个作业数组,每个目录有一个作业。您需要在阵列中设置正确数量的作业,以对应于目录数。但是,使用该阵列,您可以用一个命令管理所有作业,在所有作业完成后收到一封电子邮件,这大大简化了调度器的工作。

您可以在以下位置找到一些帮助。如果出现最坏的情况,您可以为dir in*运行一些变量
;执行sed“s%@dir@%$dir%g”template.file>sbatch.$dir;完成
从包含
@dir@
标记的模板文件中创建脚本,您要将(子)目录名放置在该模板文件中。如果需要使用路径名,使用
%
而不是
/
命令中的
,效果会更好-只要不在文件或目录名中的任何位置使用
%
。手册指出可以为
sbatch
提供参数。您应该能够创建一个文件,然后使用适当的参数调用该文件:
for dir in*;请点击…$dir;完成
。我没有调查细节或注意事项,但这是Unix(POSIX、Linux等)系统正常工作的方式。@JonathanLeffler感谢您的评论。是的,我可以为每个目录创建脚本,但是在脚本中,我还应该更改目录名,这需要为每个脚本完成。例如,在上面的sbatch脚本
test1.sh
中,最后的命令也有目录的路径。那么,如何做到这一点呢?