![for 루프에서 디렉터리를 일괄 처리한 후 디렉터리에서 폴더를 삭제하시겠습니까?](https://linux55.com/image/206027/for%20%EB%A3%A8%ED%94%84%EC%97%90%EC%84%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%EC%9D%BC%EA%B4%84%20%EC%B2%98%EB%A6%AC%ED%95%9C%20%ED%9B%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EC%82%AD%EC%A0%9C%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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
내가 올바르게 이해했다면 당신이 원하는 것은 다음과 같습니다.
cellranger
각 fastq 디렉토리에 대해 Slurm에 작업을 제출합니다.- 디렉터리를 삭제합니다.
그러나 이는 스크립트가 수행하는 작업이 아닙니다. 당신은
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