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

时间:2014-07-04 16:19:14

标签: bash

我有两个名字的文件夹(SRP1234,SRP2345)。每个文件夹都有两个子文件夹(SRX1,SRX2用于SRP1234和SRX3,SRX4用于SRP2345)。每个子文件夹还有4个子文件夹(用于SRX1的SRR1,SRR2,SRR3,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

EDITED

我不确定我明白你拥有什么,但我认为它是这样的:

 |-SRP1234
 |---SRX1
 |-----SRR1
 |-------file.sra
 |-----SRR2
 |-------file.sra
 |-----SRR3
 |-------file.sra
 |-----SRR4
 |-------file.sra
 |---SRX2
 |-SRP2345
 |---SRX3
 |---SRX4

目前还不清楚(对我来说)SRX2中的内容

1 个答案:

答案 0 :(得分:0)

使用*通配符输入输出args可能不是你想要的。简化一下,如果你有三个子目录foo [123],每个子目录包含一个.sra文件,那么shell扩展就可以这样工作:

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

我假设命令对三个输出目录没有任何用处,你真正想要的是:

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

这是对的吗?

如果是这样,你的循环应该更精细,可能是这样的:

#!/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-dump运行的输入,那么您需要描述要将输出放入哪个目录(目录?)。