如何在perl脚本中将整个目录复制到perticular文件夹

时间:2015-07-21 09:57:29

标签: perl ubuntu command

我正在尝试通过匹配名称将存储在一个目录中的压缩文件复制到另一个文件夹 下图是文件夹名称,它是我程序的输入 enter image description here

从这个列表中我只拿“Sample_51”文件夹,在这个文件夹中我有Zipped文件,如下,
enter image description here 现在我需要将所有“R1”名称文件复制到R1文件夹,将所有“R2”命名文件复制到R2文件夹。

下面我试图这样做,帮我按照上面的说明去做,

#! use/bin/perl

print "Enter Folder name \n";
print "File name: ";
chomp( my $Filename = <> );

system("mkdir R1");
system("mkdir R2");

opendir( DIR, "$Filename" ) or die "cannot open directory";
foreach my $name ( readdir(DIR) ) {
    next if ( $name =~ /^\./ );
    next if ( $name =~ /^\.\./ );

    if ( $Filename =~ /\S+(R\d)/ ) {

        system("cp -r $Filename R1");
    }
    else {
        system("cp -r $Filename R2");
    }
}

复制之后,还有一个步骤,比我在修复此问题后更新,
提前谢谢

2 个答案:

答案 0 :(得分:0)

我认为你的问题就在这一行:

if ( $Filename =~ /\S+(R\d)/ ) {

因为它匹配的是R后跟任何数字。对于名为R1R2R9或确实R99999

的文件也是如此

您需要捕获该正则表达式匹配的结果。 (顺便说一下 - 在这个例子中,一个未锚定的\S+也不会做太多。这只是在R之前的'一个或多个非空格'。

怎么样:

 if ( my ( $R_Num ) = ( $Filename =~ /_(R\d+)_/ ) {
     print "R number is $R_Num\n"; 
 }

因为那时你可以根据设置的内容工作(如果匹配失败,if将测试为false)。

答案 1 :(得分:0)

使用File::Copy复制文件。正如@sobrique所说$Filename =~ /\S+(R\d)它匹配任何数字后跟R.但我想你只是在R1R2中。试试这个:

#!/usr/bin/perl
use File::Copy;
use strict;
use warnings;

print"Enter Folder name \n";
print"File name: ";
chomp(my $Filename=<>);

mkdir "R1";
mkdir "R2";


opendir(DIR,"$Filename") or die "cannot open directory";
foreach my $name (readdir(DIR))
{
next if ($name =~ /^\./);
if($name =~ /R1/) { #compare $name not $Filename
   copy("$Filename/$name", "R1"); # copy the file from folder to R1 directory
   }
elsif($name =~ /R2/){
   copy("$Filename/$name","R2"); ## copy the file from folder to R2 directory
    }
  }