Я хочу переместить файлы с сервера, к которому подключен мой компьютер с Windows, на настоящий компьютер.Я пробовал код на моем Mac, и он работает нормально, поэтому я подозреваю, что проблема связана с тем, что файлы, которые я хочу переместить, находятся на сервере или, возможно, с Windows (я не знаком с этой ОС).Для меня важно иметь возможность использовать File::Find::Rule
, потому что в подкаталогах есть много подкаталогов, которые нужно искать.
use strict;
use warnings;
use File::Find::Rule;
use File::Copy;
# directory where files live
# my $dir = "\\172.18\user\folder\folder2";
# directory where TextGrids will be moved to
my $outdir = "\users\lisa\desktop\test";
my @files;
@files = File::Find::Rule -> file()
-> name("*_clean.TextGrid")
-> maxdepth()
-> in($dir);
foreach my $file (@files) {
$file =~ /(.*\\)(.*)/;
my $name = $2;
copy("$file", "$outdir/$name") or die "Copy failed: $!";
}
Редактировать: Хорошо, я внес некоторые изменения в скрипт ниже.Но странно то, что когда я прошу его напечатать каждый файл, он дает мне что-то вроде \\172.18\user\folder\folder/255/file.txt
.Я изменил регулярное выражение на (.*\/)(.*)
и теперь скрипт работает отлично, хотя я не знаю почему!
use strict;
use warnings;
use File::Find::Rule;
use File::Copy;
# directory where files live
my $dir = "\\\\172.18\\user\\folder\\folder2";
# directory where TextGrids will be moved to
my $outdir = "C:\\Users\\lisa\\desktop\\test";
my @files;
@files = File::Find::Rule -> file()
-> name("*_clean.TextGrid")
-> maxdepth()
-> in($dir);
foreach my $file (@files) {
print "$file\n";
$file =~ /(.*\\)(.*)/;
my $name = $2;
copy("$file", "$outdir\\$name") or die "Copy failed: $!";
}