私は複数のディレクトリからファイルをコピーしようとしています。正しいパスとファイルが出力されますが、コピーは失敗します。この問題を解決する方法をお勧めしますか?あなたはもうそれを使用していない場合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) || 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);
}
'copy" $ source_dir/$ t "、" $ target_dir/$ t "またはdie $ !;" – toolic
"/ data/backup/$ run_folder"はファイルシステムのルートからの相対パスです。代わりに現在のディレクトリに相対的にすることを意味しましたか?おそらくファイルシステムのルートにコピーするには特権が必要です。 –
Perlはディレクトリが存在しない場合は自動的に作成されると思っていましたが、間違っていました。 'mkdir $ target_dir;'を追加して修正しました。 – user3781528