아래에서는 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