#!/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");
它工作正常。
答案 0 :(得分:3)
代码工作正常。这是我最后的一个愚蠢的错误,我在$ destdir中指的是'/ destination'而不是'/ home / destination'。从本质上讲,我实际上指的是一个不存在的目录。