2015-07-21 88 views
-2

我试图通过匹配那些名称将存储在一个目录中的压缩文件复制到另一个文件夹。
下面的图像是我的程序输入的文件夹名称。
enter image description here如何将整个目录复制到perl脚本中的特定文件夹

从这个名单我拿着只有“Sample_51”文件夹,这个文件夹我有一个像下面的压缩文件里面,
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"); 
    } 
} 

后复制此一个步骤是存在的,比我会解决这个问题,
感谢后更新推进

+1

File :: Copy and perdoc -f mkdir –

+0

另外 - 你有什么问题? – Sobrique

+0

其不复制到特定目录 –

回答

0

使用File::Copy复制的文件。由于@sobrique说$Filename =~ /\S+(R\d)它的任何数字,然后按R.But我想匹配你只在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 
    } 
    } 
+0

它的工作先生,我的下一步正在汇集数据,考虑更新的问题。谢谢你的回答! –

+0

您是否收到我的新问题?请亲切地处理其非常紧急的问题 –

+0

不要删除以前的问题。当你编辑你删除了问题。请回滚编辑并询问有关文本复制部分的新问题。 –

0

我觉得你的问题是这一行:

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

因为它的匹配是R后跟任何数字。所以,将成为R2R9或确实R99999

您需要捕获正则表达式匹配的结果文件名为R1,真实。 (顺便说一句 - 非锚定\S+是不会做太多在这个例子中,要么之前“一个或多个非空格”的R.

如何只表示:

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

因为那样的话。您可以根据那是什么设置(如果匹配失败,则if将测试假)工作。

+0

它只是创建文件夹,但不能复制任何东西 –

相关问题