파일에서 디렉터리 생성 및 파일 이동

파일에서 디렉터리 생성 및 파일 이동

특정 패턴에 따라 파일을 이동하고 싶습니다. 이 코드를 사용하고 있지만 제대로 작동하지 않습니다.

for file in *.fastq.gz
do
 dir="${file%R*}"
 mkdir -- "$dir"
 mv -- "$file" "$dir"
done

다음은 몇 가지 파일 예입니다.

121123_SN323_A_L002_GPS-100_R1.fastq.gz
121123_SN323_A_L002_GPS-100_R2.fastq.gz
130201_SN132_B_L007_GPS-100_R1.fastq.gz
130201_SN132_B_L007_GPS-100_R2.fastq.gz

121123_SN323_A_L002_GPS-104_R1.fastq.gz
121123_SN323_A_L002_GPS-104_R2.fastq.gz
130201_SN132_B_L007_GPS-104_R1.fastq.gz
130201_SN132_B_L007_GPS-104_R2.fastq.gz

따라서 이러한 파일에 대해 두 개의 폴더 GPS100GPS104.

121123_SN323_A_L002_GPS-100_
121123_SN323_A_L002_GPS-104_
130201_SN132_B_L007_GPS-100_
130201_SN132_B_L007_GPS-104_

답변1

앞쪽에 있는 $dir부분 도 벗겨내야 합니다 dir=GPS${dir#*GPS}.

생성된 스크립트:

$ ls
121123_SN323_A_L002_GPS-100_R1.fastq.gz
121123_SN323_A_L002_GPS-100_R2.fastq.gz
121123_SN323_A_L002_GPS-104_R1.fastq.gz
121123_SN323_A_L002_GPS-104_R2.fastq.gz
130201_SN132_B_L007_GPS-100_R1.fastq.gz
130201_SN132_B_L007_GPS-100_R2.fastq.gz
130201_SN132_B_L007_GPS-104_R1.fastq.gz
130201_SN132_B_L007_GPS-104_R2.fastq.gz

$ for a in *.fastq.gz
do
  dir=${a%_R*}
  dir=GPS${dir#*_GPS}
  mkdir -- "$dir" 2>/dev/null
  mv -i "./$a" "$dir/"
done

$ ls
GPS-100/  GPS-104/

$ ls *
GPS-100:
121123_SN323_A_L002_GPS-100_R1.fastq.gz
121123_SN323_A_L002_GPS-100_R2.fastq.gz
130201_SN132_B_L007_GPS-100_R1.fastq.gz
130201_SN132_B_L007_GPS-100_R2.fastq.gz

GPS-104:
121123_SN323_A_L002_GPS-104_R1.fastq.gz
121123_SN323_A_L002_GPS-104_R2.fastq.gz
130201_SN132_B_L007_GPS-104_R1.fastq.gz
130201_SN132_B_L007_GPS-104_R2.fastq.gz

관련 정보