Я пытаюсь передать все каталоги и его содержимое с sftp на unix-сервер и удалить все переданные файлы с SFTP-сервера. Для этого я использую метод rget в SFTP :: Foreign. Но когда я запускаю код ниже, я продолжаю получать ошибку. Пожалуйста помоги.Перенос каталогов с использованием внешнего модуля sftp в Perl
use Net::SFTP::Foreign;
use constant {
HOST => "Host name",
REMOTE_DIR => "sample/remote",
LOCAL_DIR => "sample/local",
USER_NAME => "username",
PASSWORD => "password",
DEBUG => "0",
};
my $sftp;
$sftp = Net::SFTP::Foreign->new(
HOST,
timeout => 240,
user => USER_NAME,
password => PASSWORD,
autodie => 1,
) or die "Connection failed: " . $sftp->error;
$sftp->setcwd(REMOTE_DIR);
my @files = @{ $sftp->ls }; #Returns a reference to an array of hashes
for my $file (@files) {
print "Found file $file->{filename}\n";
$sftp->rget($file, $file, on_error => sub { print $sftp->error; });
print "File - $file transferred\n";
# Delete Files
$sftp->rremove($file, on_error => sub { print $sftp->error; });
print "Deleted File -$file\n";
}
Когда я запускаю вышеуказанный код, я получаю ошибку, как показано ниже.
Couldn't stat remote link: No such file
Но когда я перехожу в удаленное местоположение, каталоги присутствуют.
Но когда я пытаюсь использовать цикл for, используя приведенный ниже код, он работает нормально.
$sftp->rget(REMOTE_DIR, LOCAL_DIR, on_error =>
sub { print $sftp->error; }) ;
Но мое требование использовать для петли, так что я могу удалить файл передан, как только он будет передан. Поскольку удаление отдельно может вызвать проблемы, поскольку каталоги будут добавляться в SFTP часто, и я не хочу удалять любые папки, которые не были переданы.