在perl中动态创建文件

时间:2013-08-26 19:19:03

标签: perl directory

#!/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"); 

它工作正常。

1 个答案:

答案 0 :(得分:3)

代码工作正常。这是我最后的一个愚蠢的错误,我在$ destdir中指的是'/ destination'而不是'/ home / destination'。从本质上讲,我实际上指的是一个不存在的目录。