【问题标题】:Perl Copy to more than one LocationPerl 复制到多个位置
【发布时间】:2013-07-19 17:02:37
【问题描述】:

您好,我正在尝试将文件复制到多个位置。我编写了一个脚本,它将使用 File::Find 和 File::Copy 一起将文件复制到一个位置,但我无法将脚本复制到第二个或第三个位置。我尝试将第二个变量 target2 添加到脚本中,这样我也可以将 JPG 文件复制到第二个目标位置。当我尝试这样做时,我收到一条错误消息。我希望副本在将复制文件 X 秒数的循环上运行,因此我也添加了睡眠功能。谁能向我解释为什么我不能复制到多个位置或帮助我找到一种方法来做到这一点?谢谢你。

   while (1)
   { sleep (10);
    find(
       sub {
         if (-f &&/\.jpg$/i) {
           print "$File::Find::name -> $target, $target2";
           copy($File::Find::name, $target ,$target2)
            or die(q{copy failed:} . $!);

            }
           },
           @source
             ); 

            }

错误信息:Bad Buffer size for copy: 0

【问题讨论】:

    标签: perl while-loop copy


    【解决方案1】:

    复制功能无法复制到 2 个目的地。调用两次:

    copy($File::Find::name, $target);
    copy($File::Find::name, $target2);
    

    看这里看参数说明:http://perldoc.perl.org/File/Copy.html#SYNOPSIS

    正如文档所说:

    可选的第三个参数可用于指定缓冲区大小 用于复印。这是第一个文件的字节数, 将在任何给定时间保存在内存中,然后再写入 第二个文件。

    因此,当您指定第三个参数时,Perl 明白您想要手动设置缓冲区大小。但是你给了一个字符串而不是一个数字,所以它将字符串转换为一个数字:0,并给你一个错误:

    Bad Buffer size for copy: 0

    【讨论】:

    • 谢谢。这很有帮助。 :)
    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多