Если у меня есть скрипт bash (chunks.sh), который выполняет несколько мини-сценариев параллельно, мне было интересно, как правильно выполнить chunks.sh, чтобы он работал параллельно для многих папок? У меня около 1000 папок с файлами, которые нужно обработать. Вот мой сценарий:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=4
#SBATCH --time=16:00:00
#SBATCH --output=mpi_output_%j.txt
#SBATCH --mail-type=FAIL
cd $SLURM_SUBMIT_DIR
module load gcc
module load gnu-parallel
module load bwa
module load samtools
parallel -j 10 < ../1convertfiles.sh
parallel -j 10 < ../2sortfiles.sh
parallel -j 10 < ../3indexfiles.sh
parallel -j 10 < ../4converttopile.sh
parallel -j 10 < ../5createconsensus.sh
parallel -j 10 < ../6concatenateconsensus.sh
Каждая папка имеет имя, такое как THAKID0001_dir, THAKID0010_dir и т. Д. Поэтому мне было интересно, как правильно применить команду в этом сценарии для циклического просмотра моего текущего каталога, найти всекаталоги с присоединенным * _dir, а затем выполнить все эти мини-сценарии в этом каталоге?
Я пытался поместить свои параллельные команды в циклы for, но мини-сценарии повторялись много раз. Я думаю, что могу использовать:
parallel -j 10 < 1convertfiles.sh ::: *_dir/*
parallel -j 10 < 2sortfiles.sh ::: *_dir/*
etc.
Но эта логика мне кажется, что каждый параллельный командный блок не будет работать для одного и того же каталога сразу. Каждая параллельная строка будет находить свой собственный каталог для работы, и эти мини-скрипты должны работать по порядку, поэтому я попытался написать цикл for, но это создавало огромный беспорядок.
Ожидаемые результаты:
$ ./chunks.sh
### Should run the list of commands per folder ###
### For example, it will execute all the parallel commands in THAK0001_dir then it will execute all the parallel commands in THAK0002_dir, etc ####
TL; DR: Как заставить chunk.sh выполнить эти параллельные командные блоки для всех каталогов с определенным тегом (например, THAK * _dir), но каждая строка должна выполняться после завершения предыдущей строки. Надеюсь, что это имело смысл .. спасибо!