BASH:脚本将配对结束文件mv到子目录

问题描述 投票:0回答:2

问题:我有一个配对文件的文件夹,我需要将这些文件组织到子目录中。

我的文件示例:

SampleName1_S1_L001_R1_001.fastq.gz
SampleName1_S1_L001_R2_001.fastq.gz
SampleName2_S2_L001_R1_001.fastq.gz
SampleName2_S2_L001_R2_001.fastq.gz
...

我希望脚本创建子目录并移动文件,如:

SampleName1_S1_Analysis/
SampleName1_S1_L001_R1_001.fastq.gz SampleName1_S1_L001_R2_001.fastq.gz

SampleName2_S2_Analysis/
SampleName2_S2_L001_R1_001.fastq.gz SampleName2_S2_L001_R2_001.fastq.gz

...

我一直在寻找类似的线程,但似乎没有什么能满足我的问题。任何帮助将不胜感激!

bash
2个回答
-1
投票

您不需要脚本,只需按此顺序执行此命令:

编辑(我猜这可能有帮助):

#!bin/bash
for file in *.fastq.gz; do
 if [ -e "$file" ]; then
  name=$(echo "$file" | cut -d'_' -f1,2)
  mkdir "${name}_Analysis" && mv "${name}"*.fastq.gz "${name}_Analysis"
 fi;
done;

0
投票

我认为rename是这里使用的工具:

rename --dry-run -p 's|_L.*|_Analysis/$_|' *gz

样本输出

'SampleName1_S1_L001_R1_001.fastq.gz' would be renamed to 'SampleName1_S1_Analysis/SampleName1_S1_L001_R1_001.fastq.gz'
'SampleName1_S1_L001_R2_001.fastq.gz' would be renamed to 'SampleName1_S1_Analysis/SampleName1_S1_L001_R2_001.fastq.gz'
'SampleName2_S2_L001_R1_001.fastq.gz' would be renamed to 'SampleName2_S2_Analysis/SampleName2_S2_L001_R1_001.fastq.gz'
'SampleName2_S2_L001_R2_001.fastq.gz' would be renamed to 'SampleName2_S2_Analysis/SampleName2_S2_L001_R2_001.fastq.gz'

如果输出看起来不错,请在没有--dry-run的情况下再次运行它。

-p可以根据需要随时生成输出目录。

当前文件的名称将作为$_传递给中间的小Perl脚本。然后脚本修改$_rename将其用作文件的新名称。我只是在_L之后删除所有内容,然后将_Analysis/附加到目录名称的根目录。

© www.soinside.com 2019 - 2024. All rights reserved.