我有一个文件夹,*.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/