forループでディレクトリをバッチ処理した後、ディレクトリからフォルダを削除しますか?

forループでディレクトリをバッチ処理した後、ディレクトリからフォルダを削除しますか?

sbatch多くのスペースが必要なツールを使用するサーバーでコマンドを実行しています。このコマンドは、forループ内のホームディレクトリ(tq_first)の一部のディレクトリ(一部のファイル)を使用します。ループを繰り返し、完全に実行された後にディレクトリを削除する方法があるかどうか疑問に思います。ループを中断せずに削除コマンドは機能しますか?

たとえば、このループの場合

set -eu 


export PATH=/home/bin:${PATH}
reference_dir=/mnt/scratchb/REF


for fastq_dir in fastq_first/*; do
    barcode=`basename ${fastq_dir}`

    cmd="cellranger count \
        --id=${barcode} \
        --fastqs= ${fastq_dir}   \
        --sample=${barcode} \
        --transcriptome=${reference_dir} \
        --localcores=32 \
        --localmem=92"

    sbatch --nodes=1 \
        --cpus-per-task=32 \
        --mem=96G \
        --time=2880 \
        -o cellranger_count.%j.out \
        -e cellranger_count.%j.err \
        -J cellranger_count <<EOF

   cmd="rm -r $fastq_dir"
#!/bin/bash
echo "Start Cell Ranger count "`date`
echo ${cmd}
eval ${cmd}
echo "Done "`date`
cellranger count --version
EOF

done

ベストアンサー1

私が正しく理解したら、あなたが望むものは次のとおりです。

  1. cellranger各 fastq ディレクトリに対して Slurm にジョブを送信します。
  2. ディレクトリを削除します。

ただし、これはスクリプトが実行する操作ではありません。あなたは

    cmd="cellranger count \
    [. . . ]

それからあなたは:

    sbatch --nodes=1 \
         -J cellranger_count <<EOF
         [. . . ]
   cmd="rm -r $fastq_dir"

sbatchですから、あなたが実際にやるべきことから$cmd義にかかわらrm -rf $fastq_dirずですcellrangercount...

とにかく、同じディレクトリで実行されないと、とにかく動作しないとrm -rf "$fastq_dir"思うので、ループ内のフルパスを使用することをお勧めします。例えば、あなたが実際にならば、あなたは次のように変わるべきです:sbatchforfastq_first//home/echo94/data/fastq_firstfor

for fastq_dir in /home/echo94/data/fastq_first/*; do

また、ディレクトリだけが必要なので、スラッシュを追加してループがファイルを選択しないようにすることもできますfor

for fastq_dir in /home/echo94/data/fastq_first/*/; do

各ディレクトリへのフルパスがあるため、rm $fastq_dirシステムのどこでも作業できます。これらすべてをまとめると、次のスクリプトが必要になることがあります。

for fastq_dir in /home/echo94/data/fastq_first/*/; do
    barcode=`basename "$fastq_dir"`

    cmd="cellranger count \
        --id=${barcode} \
        --fastqs= ${fastq_dir}   \
        --sample=${barcode} \
        --transcriptome=${reference_dir} \
        --localcores=32 \
        --localmem=92"

    sbatch --nodes=1 \
        --cpus-per-task=32 \
        --mem=96G \
        --time=2880 \
        -o cellranger_count.%j.out \
        -e cellranger_count.%j.err \
        -J cellranger_count <<EOF
#!/bin/bash
set -ue
echo "Start Cell Ranger count `date`"
echo "$cmd" 
eval "$cmd"
echo "Done "`date` 
cellranger count --version
rm -r "$fastq_dir"
EOF

done

おすすめ記事