在 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"不会工作,除非它sbatch在同一目录中运行,所以您可能希望在for循环中使用完整路径。例如,如果您fastq_first/实际上是/home/echo94/data/fastq_first,那么您应该将您更改for为如下所示:

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

相关内容