bash는 특정 파일 확장자의 폴더에 하위 디렉토리를 생성합니다.

bash는 특정 파일 확장자의 폴더에 하위 디렉토리를 생성합니다.

아래에서는 bash특정 확장자를 가진 파일의 디렉터리 내에 하위 디렉터리를 만들려고 합니다 .bam. 파일이 .bam잘려지고 결과는 $RDIR원본 파일 위치 또는 한 수준 위의 폴더 이름에 저장됩니다. 여러 개의 파일이 있을 수 있지만 .bam항상 동일한 형식을 갖습니다. 저도 댓글을 남겼습니다. 감사해요:).

세게 때리다

DIR=/home/cmccabe/Desktop/folder   ## define data directory path
cd "$DIR" || exit 1  # check directory exists or exit
for RDIR in R_2019* ; do  ## start processing matching "R_2019*" to operate on desired directory and expand
 cd "$RDIR"/BAM   ## change directory to subfolder inside $RDIR
  bam=$(find . -type f -name "*.bam")   # extract .bam
  sample="$(echo $bam|cut -d_ -f3-)" # remove before second underscore
  mkdir -p "${sample%.*}" && mv "$sample" "RDIR"/"${x%.*}"  ## make directory of sample id one level up
done  ## close loop

구조 /home/cmccabe/Desktop/folder --- $DIR입니다 ---

R_2019_00_00_00_00_00_xxxx_xx-0000-00  --- this is $RDIR ---
     BAM   ---subdirectory---
       IonCode_0241_19-0000-Last-First.bam.bai
       IonCode_0241_19-0000-Last-First.bam
       IonCode_0243_19-0001-Las-Fir.bam.bai
       IonCode_0243_19-0001-Las-Fir.bam
     QC    ---subdirectory---

스크립트 구조 다음 /home/cmccabe/Desktop/folder --- $DIR입니다.---

R_2019_00_00_00_00_00_xxxx_xx-0000-00  --- this is $RDIR ---
     BAM                  ---subdirectory---
     19-0000-Last-First   ---subdirectory---
     19-0001-Las-Fir      ---subdirectory---
     QC                   ---subdirectory---

세트-x

bash: cd: R_2019*/BAM: No such file or directory
++ find . -type f -name '*.bam'
+ bam=
++ echo
++ cut -d_ -f3-
+ sample=
+ mkdir -p ''
mkdir: cannot create directory ‘’: No such file or directory

답변1

다음 줄에 문제가 있는 것 같습니다.

 bam=$(find . -type f -name "*.bam")   # extract .bam
 sample="$(echo $bam|cut -d_ -f3-)" # remove before second underscore

개정하다:

이는 한 줄로 달성할 수 있습니다.

i=$(find . -type f -name "*.bam" -print | while read f;do echo "$f" | cut -d_ -f3-;done| cut -f 1 -d '.') ## To take the file names and then cut.

그런 다음 for 루프를 추가하여 디렉터리를 만듭니다.

for x in $i
        do mkdir -p $DIR/$x
        done

최종 스크립트:

DIR=/home/vvek/MyLearning/Linux/bam/   ## define data directory path
cd "$DIR" || exit 1  # check directory exists or exit
for RDIR in R_2019* ; do  ## start processing matching "R_2019*" to operate on desired directory and expand
 cd "$RDIR"/BAM   ## change directory to subfolder inside $RDIR
i=$(find . -type f -name "*.bam" -print | while read f;do echo "$f" | cut -d_ -f2-;done| cut -f 1 -d '.')  # extract .bam

for x in $i
        do mkdir -p $DIR/$x
        done
done  ## close loop

관련 정보