Perl File :: Copy实际上并没有复制文件

时间:2017-06-08 18:58:47

标签: perl

快速概要:假设一个目录中有多个相同的文件类型(在本例中为10个.txt文件)。我正在尝试使用Perl的复制功能将其中的5个复制到一个新目录中,然后压缩该目录。

代码有效...除了应该复制.txt文件的文件夹,实际上没有任何内容,我不知道为什么。这是我的完整代码:

#!/usr/bin/perl
use strict;
use warnings;

use File::Copy;

my $source_dir = "C:\\Users\\user\\Documents\\test";
my $dest_dir = "C:\\Users\\user\\Desktop\\files";
my $count = 0;

opendir(DIR, $source_dir) or die $!;
system('mkdir files');

while (my $file = readdir(DIR)) {
    print "$file\n";
    if ($count eq 5) {
        last;
    }

    if ($file =~ /\.txt/) {
        copy("$file", "$dest_dir/$file");
        $count++;
    }
}

closedir DIR;

system('"C:\Program Files\Java\jdk1.8.0_66\bin\jar.exe" -cMf files.zip files');

system('del /S /F /Q files');
system('rmdir files');

一切正常......创建目录files,然后压缩成files.zip ...当我打开zip文件时,files目录为空,所以就好像复制声明没有复制任何东西。

$source_dir中有10个.txt个文件,就像这样(出于测试目的):

  • test1.txt的
  • 的test2.txt
  • test3.txt
  • 有test4.txt
  • 入test5.txt
  • 了test6.txt
  • 包含test7.txt
  • test8.txt
  • test9.txt
  • test10.txt

这些文件实际上并未复制过来... 注意: print "$file\n"已添加进行测试,而且确实打印出{{ 1}},test1.txt等等,直到test2.txt所以我知道找到文件,而不是复制它们。

关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:3)

我认为您的脚本中存在拼写错误:     system('mkdir files'); 应该:     system("mkdir $dest_dir");

但是,真正的问题是您没有使用源文件的完整路径。将您的副本更改为:     copy("$source_dir/$file", $dest_dir);

看看是否有帮助。 您可能还想查看:File :: Path和Archive :: Zip,它们将消除系统调用。