【问题标题】:How to copy whole directory to perticular folder in perl script如何将整个目录复制到perl脚本中的特定文件夹
【发布时间】:2015-07-21 09:57:29
【问题描述】:

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

从这个列表中,我只使用“Sample_51”文件夹,在这个文件夹中我有如下压缩文件,
现在我需要将所有“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");
    }
}

复制这一步后,我将在修复此问题后更新,
在此先感谢

【问题讨论】:

  • 文件::复制和 perdoc -f mkdir
  • 还有 - 你有什么问题?
  • 它没有复制到特定目录
  • 嗨@aditya,请不要在这里删除问题。如果您愿意,可以添加到以前的问题或提出新问题。
  • 如何再次检索问题,因为我已经通过删除它进行了更新。现在我该如何找回呢?

标签: perl ubuntu command


【解决方案1】:

使用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
    }
  }

【讨论】:

  • 它的工作先生,我的下一步是汇集数据,考虑更新的问题。谢谢你的回答!!!!
  • 你有我的新问题吗?请努力解决它非常紧迫的问题
  • 不要删除上一个问题。当您编辑时,您删除了问题。请回滚编辑并提出有关文本复制部分的新问题。
  • 如何再次检索问题,因为我已经通过删除它进行了更新。现在我该如何找回它?
  • 我问了一个新问题,这是这个问题的延续,请帮帮我
【解决方案2】:

我认为你的问题是这一行:

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)。

【讨论】:

  • 它只是创建文件夹而不是复制任何东西
猜你喜欢
  • 2017-12-20
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2015-05-05
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
相关资源
最近更新 更多