¿Cuál es la mejor manera en Perl de copiar archivos en un árbol de directorios aún por crear?

StackOverflow https://stackoverflow.com/questions/229357

  •  04-07-2019
  •  | 
  •  

Pregunta

¿Cuál es la mejor manera en Perl de copiar archivos en un árbol de directorios de destino que aún no se ha creado?

Algo como

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

no funcionará ya que el directorio tardir / dest1 / dest2 aún no existe. ¿Cuál es la mejor manera de copiar con la creación de directorios en Perl?

¿Fue útil?

Solución

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

Otros consejos

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 ( ) es no básico pero combina la solución File :: Path :: mkpath () y File :: Copy :: copy () en algo aún más corto, y conserva los permisos a diferencia de File :: Copy. También contiene otras funciones de utilidad ingeniosas.

Vea las otras respuestas para hacer la copia, pero para crear el directorio Path :: Class es muy agradable de usar:

use Path::Class;

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

# ... do the copying here
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top