Perl将文件从一个目录复制到另一个目录
我正试图用下面的代码从多个目录复制文件。它打印出正确的路径和文件,但无法复制它们。请建议如何解决此问题?谢谢Perl将文件从一个目录复制到另一个目录,perl,Perl,我正试图用下面的代码从多个目录复制文件。它打印出正确的路径和文件,但无法复制它们。请建议如何解决此问题?谢谢 #!/usr/bin/perl use strict; use warnings; use File::Copy; my $target_dir = ""; my @dirs = grep { -d } glob '/data/results/*'; for my $source_dir ( @dirs ) { opendir(my $DIR, $source_dir)
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
my $target_dir = "";
my @dirs = grep { -d } glob '/data/results/*';
for my $source_dir ( @dirs ) {
opendir(my $DIR, $source_dir) || die "can't opendir $source_dir: $!";
my @files = readdir($DIR);
print "the directory is $source_dir\n";
my $run_folder = (split '/', $source_dir)[3];
print "the folder is $run_folder\n";
$target_dir = "/data/backup/$run_folder";
print $target_dir;
foreach my $t (@files)
{
if(-f "$source_dir/$t" ) {
#Check with -f only for files (no directories)
print "$source_dir/$t";
print "$target_dir/$t";
copy "$source_dir/$t", "$target_dir/$t";
}
}
closedir($DIR);
}
我建议您做几件事: 如果不再使用文件句柄,请尽快关闭它:
opendir(my $DIR, $source_dir) || die "can't opendir $source_dir: $!";
my @files = readdir($DIR);
close ($DIR);
当您尝试备份某些文件和目录时,目标目标可能没有该目录,因此:
$target_dir = "/data/backup/$run_folder";
print $target_dir;
if ( ! -d $target_dir )
{
#creates the dir
}
最后一点:
foreach my $t (@files)
{
chomp $t; # it removes any new line
if(-f "$source_dir/$t" ) {
#Check with -f only for files (no directories)
print "$source_dir/$t";
print "$target_dir/$t";
if ( ! copy "$source_dir/$t", "$target_dir/$t" )
{
print "Some error: $!";
}
}
}
通常,您可以使用File::Find,它有一个简单的教程
“/data/backup/$run\u folder”
相对于文件系统的根目录。您的意思是将其改为相对于当前目录吗?复制到文件系统的根目录可能需要提升权限。我认为Perl会自动创建一个不存在的目录,但我错了。我添加了“mkdir$target_dir;”它把它修好了。所有函数成功时返回1,失败时返回0。$!将在遇到错误时设置。