У меня есть каталог 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 scripts
для всех остальных каталогов, как указано выше?
for dir in *; do sed "s%@dir@%$dir%g" template.file > sbatch.$dir; done
для создания сценариев из файла шаблона, который содержит@dir@
маркеров, в которые вы хотите поместить имя (под)каталога. Использование%
вместо/
в командеsed
работает лучше, если вам нужно работать с путями — до тех пор, пока вы не используете%
нигде в именах файлов или каталогов. - person Jonathan Leffler   schedule 14.11.2020sbatch
указано, что аргументы могут быть предоставленыsbatch
. Вы должны иметь возможность создать один файл, а затем вызвать его с соответствующими аргументами:for dir in *; do sbatch … $dir; done
. Я не исследовал детали или предостережения, но это было бы нормальным способом работы систем Unix (POSIX, Linux, …). - person Jonathan Leffler   schedule 14.11.2020test1.sh
команда в конце также имеет путь к каталогу. Итак, как это сделать? - person beginner   schedule 14.11.2020