Si simplemente está copiando y sin hacer ningún procesamiento en los archivos, no hay razón para no usar xcopy
.
Ahora, escribí el guión a continuación a la luz de los comentarios de Telemachus para proporcionarle un punto de partida. Personalmente me quedaría con xcopy
para copiar y File::Find
si el contenido del archivo necesita ser procesado. Además, estoy seguro de que hay alrededor de 37 errores en el código a continuación. Pero, si quieres jugar un poco, podría ser instructivo:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw(catfile);
die "mydeepcp src-dir target-dir\n" unless @ARGV == 2;
my ($src, $target) = @ARGV;
mydeepcp($src => $target);
sub mydeepcp {
my ($src, $target) = @_;
opendir my $dir_h, $src
or die "Cannot open directory: '$src': $!";
while (my $file = readdir $dir_h) {
next if $file =~ m{^\.\.?$};
my $src_path = catfile $src => $file;
my $target_path = catfile $target => $file;
if (-d $src_path) {
# FIXME: insert code somewhere to create destination dir
mydeepcp($src_path => $target_path);
}
elsif (-f _) {
if (my $err = docp($src_path => $target_path)) {
warn sprintf(
"Error copying '%s' from '%s' to '%s': %s\n",
$file, $src, $target, $err
);
}
}
else {
warn "Skipping '$src_path'\n";
}
}
closedir $dir_h;
return;
}
sub docp {
my ($src, $target) = @_;
warn "'$src' => '$target'\n";
return;
}
__END__
Salida:
C:\Temp> ghj c:\windows f:\qwert
...
'C:\windows\$hf_mig$\KB899591\update\spcustom.dll' => 'F:\qwert\$hf_mig$\KB899591\update\spcustom.dll'
'C:\windows\$hf_mig$\KB899591\update\update.exe' => 'F:\qwert\$hf_mig$\KB899591\update\update.exe'
'C:\windows\$hf_mig$\KB899591\update\update.ver' => 'F:\qwert\$hf_mig$\KB899591\update\update.ver'
Sin duda, no es tan simple como llamar dircopy()? – radicalmatt
No, es _exactamente_ así de simple. Instalar File :: Copy :: Recursive; leer sus documentos; importarlo en tu script; usarlo CPAN es la aplicación asesina de Perl. – Telemachus
En realidad, otras dos cosas. En primer lugar, con el interés de aprender más, siempre puede leer la fuente del módulo que utiliza, para ver cómo el autor hace las cosas. Segundo, deja de llamarme Shirley. – Telemachus