Подтвердить что ты не робот

Каким образом Perl лучше всего копировать файлы в еще не созданное дерево каталогов?

Как лучше всего в Perl скопировать файлы в еще не созданное дерево конечного каталога?

Что-то вроде

copy("test.txt","tardir/dest1/dest2/text.txt");

не будет работать, поскольку каталог tardir/dest1/dest2 еще не существует. Каков наилучший способ копирования с созданием каталога в Perl?

4b9b3361

Ответ 1

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: [email protected]\n" unless $dirs;
}

copy($file,$path) or die "Failed to copy $file: $!\n";

Ответ 2

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;
}

Ответ 3

File::Copy::Recursive:: fcopy() является неосновным, но объединяет File:: Path:: mkpath() и File:: Copy:: copy() во что-то еще более короткое и сохраняет разрешения в отличие от File:: Copy. Он также содержит другие полезные функции полезности.

Ответ 4

См. другие ответы для копирования, но для создания каталога Path:: Class очень приятно использовать:

use Path::Class;

my $destination_file  = file('tardir/dest1/dest2/test.txt');
$destination_file->dir->mkpath;

# ... do the copying here