1

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; }
);

$dest が $host に存在する場合、rput の on_error が常に発生し、$sftp->error は "リモート ディレクトリ '/whatever' already exists" になります。

エラーにもかかわらず、rput は続行し、dir を再帰的にコピーしますが、ターゲット ホストでは、/whatever ではなく、/whatever のコピーされます。つまり、/whatever/whatever になります。

これは、rput の前に行うと厄介な回避策として機能しますが、実際には宛先ディレクトリを削除したくありません。

$sftp->rremove( $dest );

誰が私が間違っているのか分かりますか? 転送したいすべてのファイルをグロブしてから foreach $file (@glob_result) { $sftp->put ( yada, yada ) }; を実行したほうがよいでしょうか? それは非効率的でエラーが発生しやすいようです。

4

2 に答える 2

0

このエラーは予期されたものです。無視してください。

あなたのファイルが に転送されていることに関して、/whatever/whatever少なくともNet::SFTP::Foreignの開発版では、その問題を再現できません。

設定すると何が得られます$Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768か?

于 2012-03-02T09:45:20.053 に答える
-1

ソースは ./* で、宛先は ./.

my ( $source, $dest ) = ('/whatever/*','/whatever/');

これがうまくいくことを願っています。

于 2012-03-02T08:07:15.897 に答える