Linuxで複数のファイルを複数のフォルダに移動するには?

Linuxで複数のファイルを複数のフォルダに移動するには?

*.fastq.gz多くの例(R1とR2)のファイルを含むフォルダがあります。たとえば、「Raw_WGS」フォルダには次のファイルがいくつかあります。

Sample_1_R1.fastq.gz, Sample_1_R2.fastq.gz, Sample_2_R1.fastq.gz, Sample_2_R2.fastq.gz, Sample_3_R1.fastq.gz, Sample_3_R2.fastq.gz

サンプルシーケンスの名前に応じて、別のサブフォルダがある別の「Analytic」というフォルダがあります。名前はサブフォルダです

Sample_1, Sample_2, Sample_3

すべてのサンプルの名前のみを含むテキストファイルがあります。つまり、各サンプルとファイルを「Analytic」フォルダの名前に基づいてそのサブフォルダに移動したいとSample_1, Sample_2, Sample_3思います。*_R1.fastq.gz*_R2.fastq.gz

すべてのサンプルに対してこのタスクを一度に行う方法を教えてください。このコマンドを使用すると、各ファイルを一度に移動できますmv。しかし、何千ものファイルがあります。だからスクリプトを実行して移動したいと思います。提案があれば教えてください。

答え1

私が正しく理解した場合、名前を含むファイルは必要ありません。ファイル名にはすでに存在します。。この試み:

for i in *_R{1,2}.fastq.gz; do 
  # use `cp` to be sure it works
  cp "$i" /path/toAnalisys/"${i%_*}"
done

答え2

Samples.txtの各行に1つのSample_1〜3が含まれていると仮定すると、xargsコマンドを設定してmvを呼び出すことができます。

tree -F
< Samples.txt \
xargs -I {} -t mv -t Analysis/{}/ \
       Raw_WGS/{}_R1.fastq.gz  \
       Raw_WGS/{}_R2.fastq.gz ;
tree -F

結果:

Before move...
 .
├── Analysis/
│   ├── Sample_1/
│   ├── Sample_2/
│   ├── Sample_3/
│   ├── Sample_4/
│   └── Sample_5/
└── Raw_WGS/
    ├── Sample_1_R1.fastq.gz
    ├── Sample_1_R2.fastq.gz
    ├── Sample_2_R1.fastq.gz
    ├── Sample_2_R2.fastq.gz
    ├── Sample_3_R1.fastq.gz
    └── Sample_3_R2.fastq.gz

After move...
.
├── Analysis/
│   ├── Sample_1/
│   │   ├── Sample_1_R1.fastq.gz
│   │   └── Sample_1_R2.fastq.gz
│   ├── Sample_2/
│   │   ├── Sample_2_R1.fastq.gz
│   │   └── Sample_2_R2.fastq.gz
│   ├── Sample_3/
│   │   ├── Sample_3_R1.fastq.gz
│   │   └── Sample_3_R2.fastq.gz
│   ├── Sample_4/
│   └── Sample_5/
└── Raw_WGS/

関連情報