ファイルからディレクトリを作成してファイルを移動する

ファイルからディレクトリを作成してファイルを移動する

特定のパターンに従ってファイルを移動したいです。このコードを使用していますが、正常に動作しません。

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

したがって、これらのファイルの2つのフォルダ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

関連情報