如何将zip文件夹链接到新创建的文件夹

时间:2015-04-20 08:52:39

标签: perl

我正在尝试将数据从文件夹(名为Zip)复制到一组新创建的文件夹中。

Zip文件夹内容为:

SO_90_X_L001_R1.fastq.gz
SO_100_X_L001_R1.fastq.gz
SO_101_X_L001_R1.fastq.gz 

我创建了以下空文件夹:

SO_90
SO_100
SO_101

如果不提供键盘输入,是否可以使用Perl将这些压缩文件复制到匹配的文件夹?

我尝试了下面的脚本,而且我没有得到正确的输出。

#!usr/bin/perl

use File::Copy "cp";
open(my $F, "a.txt") or die("cant open a.txt\n");
  while(<$F>)
{
next unless /\S/;
mkdir $_ ;

}
close($F);
for my $file (<SO_/*.fastq.gz>){
  print $_;
  if( $file =~ m!SO_/(.*)_X_L001_R1.fastq.gz! ) {
     mkdir($_);              # comment this line if not necessary
     cp($file, "$1/") or  warn("Copy '$file, $1' failed\n"); 
  } else {
     warn("$file is not ending in '_X_L001_R1.fasta.gz'\n");
  }
}

2 个答案:

答案 0 :(得分:1)

我正在写一个新的答案,因为我们的问题实际上是不同的。

我们有几个像ZIP/SO_100_X_L001_R1.fastq.gz这样的文件要复制到 SO_100/...

#!/usr/bin/perl
use File::Copy "cp";

for my $file (<ZIP/*.fastq.gz>){
  print $_;
  if( $file =~ m!ZIP/(.*)_X_L001_R1.fastq.gz! ) {
     mkdir($1);              # comment this line if not necessary
     cp($file, "$1/") or  warn("Copy '$file, $1' failed\n"); 
  } else {
     warn("$file is not ending in '_X_L001_R1.fasta.gz'\n");
  }
}

编辑:我添加了一些“警告”以帮助调试

答案 1 :(得分:0)

perl -nle 'mkdir $_ if /\S/' a.txt
  • -l从文件夹名称中删除\n(否则文件夹名称为SO_100\n
  • if /\S/跳过输入文件中可能的空行

(您的问题已更改....)更新:如果您需要更复杂的处理,您可以构建一个脚本,其中可以包含以下内容:

open(my $F, "a.txt") or die("cant open a.txt\n");
while(<$F>){ 
  chomp;
  next unless /\S/;
  mkdir $_ ;
  #... do other things related with this folder...
}
close $F;