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

관련 정보