快速概要:假设一个目录中有多个相同的文件类型(在本例中为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
个文件,就像这样(出于测试目的):
这些文件实际上并未复制过来... 注意: print "$file\n"
已添加进行测试,而且确实打印出{{ 1}},test1.txt
等等,直到test2.txt
所以我知道找到文件,而不是复制它们。
关于我哪里出错的任何想法?
答案 0 :(得分:3)
我认为您的脚本中存在拼写错误:
system('mkdir files');
应该:
system("mkdir $dest_dir");
但是,真正的问题是您没有使用源文件的完整路径。将您的副本更改为:
copy("$source_dir/$file", $dest_dir);
看看是否有帮助。 您可能还想查看:File :: Path和Archive :: Zip,它们将消除系统调用。