2012-03-02 67 views
1

http://metacpan.org/pod/Net::SFTP::Foreign的Net :: SFTP ::國際 - rput失敗(在某種程度上)如果目標目錄中存在

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 $主機,rput的ON_ERROR總是火災和$ sftp-上存在>錯誤是「遠程目錄「/不管」已經存在」

儘管出現錯誤,rput進行,並遞歸複製目錄,但taget主機上,它會得到下複製/不管,而不是超過 /不管。即我最終以/無論/什麼。

這作爲crumby解決辦法,如果rput以前做過,但我真的不希望刪除目標目錄:

$sftp->rremove($dest); 

任何人有任何知道我做錯了嗎?我將所有的通配符我要傳輸的文件的更好,然後做一個foreach $文件(@glob_result){$ sftp->放(亞達,亞達)};?這似乎效率低下且容易出錯。

回答

0

該錯誤的預期,只是忽略它。

關於你的文件被轉移到/whatever/whatever,我無法重現這個問題,至少在Net :: SFTP :: Foreign的development version

當您設置$Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768時,您會得到什麼?

+0

嗯,你說得對。我無法重現簡單測試程序的/無論/什麼。我不確定當我觀察到這種行爲時我做了什麼。 – 2012-03-02 15:19:22

+1

好吧,所以現在我的on_error子檢查該消息並忽略它。其他錯誤會阻止我的程序。感謝您的回覆! – 2012-03-02 15:27:28

-1

來源應該./*和目標./。

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

我希望這個作品。

+0

'rput'不接受通配符。 – salva 2012-03-02 09:47:06