如何在bash脚本中将输出文件发送到子目录

如何在bash脚本中将输出文件发送到子目录,bash,Bash,我有两个名为(SRP1234、SRP2345)的文件夹。每个文件夹都有两个子文件夹(SRX1、SRX2用于SRP1234,SRX3、SRX4用于SRP2345)。每个子文件夹还有4个子文件夹(SRR1、SRR2、SRR3、SRX1的SRR4等)。每个SRR floder都有一个文件(扩展名为.sra),我必须对其进行分析并将结果放入SRR子文件夹中。 但我不能将结果文件放在SRR子目录中 下面是我编写的示例代码 #!/bin/bash DATA=/home/data/SRA_Data for r

我有两个名为(SRP1234、SRP2345)的文件夹。每个文件夹都有两个子文件夹(SRX1、SRX2用于SRP1234,SRX3、SRX4用于SRP2345)。每个子文件夹还有4个子文件夹(SRR1、SRR2、SRR3、SRX1的SRR4等)。每个SRR floder都有一个文件(扩展名为.sra),我必须对其进行分析并将结果放入SRR子文件夹中。 但我不能将结果文件放在SRR子目录中

下面是我编写的示例代码

#!/bin/bash
DATA=/home/data/SRA_Data
for run in $DATA/SRP*
do
  fastq-dump -I --split-files ${run}/SRX*/SRR*.sra --outdir $run/SRX*/SRR*
done
已编辑

我不确定我是否理解你所拥有的,但我认为是这样的:

 |-SRP1234
 |---SRX1
 |-----SRR1
 |-------file.sra
 |-----SRR2
 |-------file.sra
 |-----SRR3
 |-------file.sra
 |-----SRR4
 |-------file.sra
 |---SRX2
 |-SRP2345
 |---SRX3
 |---SRX4
fastq-dump --split-files foo*/*.sra --outdir foo*

fastq-dump --split-files foo1/a.sra foo2/b.sra foo3/c.sra --outdir foo1 foo2 foo3
#!/bin/bash
DATA=/home/data/SRA_Data
for directory in $DATA/SRP*/SRX*/SRR*
do
  fastq-dump -I --split-files "${directory}"/*.sra --outdir "${directory}"/
done

(对我来说)不清楚SRX2中的内容是什么,在输入和输出参数中使用*通配符可能不是您想要的。简化一点,如果您有三个子目录foo[123],每个子目录都包含一个.sra文件,shell扩展的工作方式如下:

 |-SRP1234
 |---SRX1
 |-----SRR1
 |-------file.sra
 |-----SRR2
 |-------file.sra
 |-----SRR3
 |-------file.sra
 |-----SRR4
 |-------file.sra
 |---SRX2
 |-SRP2345
 |---SRX3
 |---SRX4
fastq-dump --split-files foo*/*.sra --outdir foo*

fastq-dump --split-files foo1/a.sra foo2/b.sra foo3/c.sra --outdir foo1 foo2 foo3
#!/bin/bash
DATA=/home/data/SRA_Data
for directory in $DATA/SRP*/SRX*/SRR*
do
  fastq-dump -I --split-files "${directory}"/*.sra --outdir "${directory}"/
done
我认为command对三个输出目录没有任何用处,您真正想要的是:

fastq-dump --split-files foo1/a.sra --outdir foo1
fastq-dump --split-files foo2/b.sra --outdir foo2
fastq-dump --split-files foo3/c.sra --outdir foo3
对吗

如果是这样,您的循环应该更细粒度,可能如下所示:

 |-SRP1234
 |---SRX1
 |-----SRR1
 |-------file.sra
 |-----SRR2
 |-------file.sra
 |-----SRR3
 |-------file.sra
 |-----SRR4
 |-------file.sra
 |---SRX2
 |-SRP2345
 |---SRX3
 |---SRX4
fastq-dump --split-files foo*/*.sra --outdir foo*

fastq-dump --split-files foo1/a.sra foo2/b.sra foo3/c.sra --outdir foo1 foo2 foo3
#!/bin/bash
DATA=/home/data/SRA_Data
for directory in $DATA/SRP*/SRX*/SRR*
do
  fastq-dump -I --split-files "${directory}"/*.sra --outdir "${directory}"/
done

如果您确实希望来自多个SRR目录的文件成为每个fastq转储运行的输入,那么您需要描述哪个目录(目录?)你想把输出放进去。

也许你应该用
bash-x
运行这个脚本,看看它是否像你认为的那样。记住用双引号括起变量:
--outdir“$run”/SRX*/SRR*
@ams所有结果文件都只放在一个SRR子文件夹中。