Perlで、まだ作成されていない宛先ディレクトリツリーにファイルをコピーするための最良の方法は何ですか?
何かのようなもの
copy("test.txt","tardir/dest1/dest2/text.txt");
ディレクトリtardir/dest1/dest2がまだ存在しないため、機能しません。 Perlでディレクトリを作成してコピーする最良の方法は何ですか?
use File::Path;
use File::Copy;
my $path = "tardir/dest1/dest2/";
my $file = "test.txt";
if (! -d $path)
{
my $dirs = eval { mkpath($path) };
die "Failed to create $path: $@\n" unless $dirs;
}
copy($file,$path) or die "Failed to copy $file: $!\n";
use File::Basename qw/dirname/;
use File::Copy;
sub mkdir_recursive {
my $path = shift;
mkdir_recursive(dirname($path)) if not -d dirname($path);
mkdir $path or die "Could not make dir $path: $!" if not -d $path;
return;
}
sub mkdir_and_copy {
my ($from, $to) = @_;
mkdir_recursive(dirname($to));
copy($from, $to) or die "Couldn't copy: $!";
return;
}
File :: Copy :: Recursive :: fcopy()は非コアですが、File :: Path :: mkpath()ソリューションとFile :: Copy :: copy()ソリューションをさらに短いものに結合します、およびFile :: Copyとは異なりアクセス許可を保持します。また、他の気の利いたユーティリティ関数も含まれています。