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

我有另一个文件夹,例如“分析”,其中根据样本序列的名称有不同的子文件夹。我有名为的子文件夹

Sample_1, Sample_2, Sample_3

我有一个文本文件,其中包含所有且仅包含我的样本的名称,即Sample_1, Sample_2, Sample_3.现在,我想根据“Analysis”文件夹中的名称将每个样本的*_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 每个 lne 包含 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/

相关内容