0
#!/usr/bin/perl -w
#use Parallel::ForkManager;
use Data::Dumper;

my $parent='/source';
my $destdir='/destination';

#open parent directory
opendir(DIR, $parent) or die "Can't open the current directory: $!\n";

# read directory names in that directory into @names 
my @dirs = grep {-d "$parent/$_" && ! /^\.{1,2}$/} readdir(DIR);

#my $pm=new Parallel::ForkManager();

foreach (@dirs)
{
    #$pm -> start and next;
    #do only if a folder contains .fastq.gz files
    my @txt = <$parent/$_/*.fastq.gz>;
    if(@txt)
    {         
        system("zcat $parent/$_/*R1*.fastq.gz | gzip > $destdir/$_.R1.fastq.gz");
        system("zcat $parent/$_/*R2*.fastq.gz | gzip > $destdir/$_.R2.fastq.gz");
        print "Inside $_ folder \n";
    }
    #$pm -> finish;
}

大家好,所以我有一个源“$parent/”目录。其中有 32 个子目录。每个目录都包含一些R1 .fastq.gz 文件和R2 .fastq.gz 文件。我必须将R1 .fastq.gz 文件合并到一个 R1.fastq.gz 文件中,对于R2 .fastq.gz 文件也是如此。合并的 fastq.gz 文件存储在目标目录“$destdir/”中。我还希望合并的 fastq.gz 文件的名称与合并和创建它的子目录的名称相匹配(第 23 和 24 行)。当我运行我的代码时,我收到以下错误:

sh: 1: cannot create /destination/Fastqc.R1.fastq.gz: Directory nonexistent 
sh: 1: cannot create /destination/Fastqc.R2.fastq.gz: Directory nonexistent

例如,这里的 Fastqc 来自我创建合并文件的目录的名称。我已经尝试过,但我无法弄清楚我的代码有什么问题。有人可以帮忙吗?

当我使用

system("zcat $parent/$_/*R1*.fastq.gz | gzip > $_.R1.fastq.gz"); instead of 
system("zcat $parent/$_/*R1*.fastq.gz | gzip > $destdir/$_.R1.fastq.gz"); 

它工作正常。

4

1 回答 1

3

代码工作正常。从我的角度来看,这是一个愚蠢的错误,我在 $destdir 中指的是“/destination”而不是“/home/destination”。本质上,我实际上指的是一个不存在的目录。

于 2013-08-26T19:51:18.680 回答