Net::SFTP::Foreign - rput falha (mais ou menos) se o diretório de destino existir
-
15-11-2019 - |
Pergunta
http://metacpan.org/pod/Net::SFTP::Foreign
my ( $user, $password, $host ) = @_;
my ( $source, $dest ) = '/whatever';
my $sftp = Net::SFTP::Foreign->new(
user => $user,
host => $host,
password => $password,
more => [ -o => 'StrictHostKeyChecking no' ]
);
$sftp->rput(
$source, $dest,
overwrite => 1,
on_error =>
sub { print $sftp->error; }
);
Se $dest existir em $host, o on_error do rput sempre dispara e $sftp->error é "O diretório remoto '/whatever' já existe"
Apesar do erro, o rput continua e copia recursivamente o diretório, mas no host taget ele será copiado sob /tanto faz, em vez de sobre /qualquer que seja.ou sejaEu acabo com / tanto faz / tanto faz.
Isso serve como uma solução alternativa, se feito antes do rput, mas na verdade não quero remover o diretório de destino:
$sftp->rremove( $dest );
Alguém tem alguma ideia do que estou fazendo de errado?Seria melhor agrupar todos os arquivos que desejo transferir e, em seguida, fazer um foreach $file (@glob_result) { $sftp->put ( yada, yada ) };?Isso parece ineficiente e propenso a erros.
Solução
Esse erro é esperado, apenas ignore-o.
Em relação aos seus arquivos sendo transferidos para /whatever/whatever
, não consigo reproduzir esse problema, pelo menos com o versão de desenvolvimento de Net::SFTP::Foreign.
O que você ganha quando define $Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768
?
Outras dicas
A origem deve ./* e o destino ./.
my ( $source, $dest ) = ('/whatever/*','/whatever/');
Eu espero que isso funcione.