2014-02-25 52 views
1

我需要每晚通過sftp下載新文件。目前這個目錄中有成千上萬的文件(我無法控制),並希望能夠將我必須抓取的文件限制爲比上次運行此過程更新的文件。從sftp下載比x日期更新的文件和ruby

我知道我可以很容易地通過ssh來做到這一點,但是我還沒有看到只有sftp才能做到這一點。除了迭代每個文件並檢查attributes.mtime之外,我還有其他選擇嗎?

例如:

Net::SFTP.start('sftp.host.com', 'username', :password => 'password') do |sftp| 
    sftp.dir.glob('prefix.', '*').each do |file| 
    if Time.at(file.attributes.mtime) > last_process_time 
     sftp.download!(file, "some/local/path/") 
    end 
    end 
end 

回答

0

使用rsync的(明顯)相比(這是通過ssh,但..杜):

您的代碼只比較時間戳,rsync的還檢查文件大小和可選的校驗。它還會在兩側創建文件列表並進行比較。然後它開始傳輸不同步的文件。不確定rsync是否同時使用多個文件下載。而rsync可能會做更多聰明的事情。 (source

也許這些rsync特性中的一些可用於僅使用sftp構建更快的同步系統。多次同時下載看起來像是一場即時勝利。

你能比較你的同步時間結果與rsync時間(如果需要,創建一個開發設置)?因爲我認爲一旦你得到了上述的一些東西,剩下的就是sftp協議的一些開銷。