我需要在ruby本地緩存一個ftp文件夾。現在我正在使用ftp_sync下載ftp文件夾,但它很痛苦,你們知道任何可以並行下載文件夾文件的庫嗎? 謝謝!如何在Ruby中並行遞歸下載FTP文件夾?
回答
的syncftp寶石可以幫助你:
http://rubydoc.info/gems/syncftp/0.0.3/frames
Ruby有一個體面的內置的FTP庫如果你想推出自己的:
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/ftp/rdoc/Net/FTP.html
要下載文件並行地,可以使用多個超時線程:
得到並行工作做的好方法是賽璐璐,併發框架:
https://github.com/celluloid/celluloid
所有這一切說,如果下載速度被限制在整體網絡帶寬,那麼這些方法都沒有將幫助很大。
爲了加快這種情況下的傳輸速度,請確保您只下載已更改的信息:新文件和已更改的現有文件部分。
分段下載可以給在某些情況下大規模的加速,如下載大的日誌文件,只有文件的一小部分發生了變化,變化都在文件的末尾,都追加。
你也可以考慮炮擊到命令行。有很多工具可以幫助你做到這一點。一個好的通用的一個是「捲曲」時,支持簡單的範圍爲FTP文件以及,比如你可以得到的第一個100個字節使用FTP這樣的文件:
curl -r 0-99 ftp://www.get.this/README
你開放給其他FTP以外的協議?看看「rsync」命令,它非常適合下載同步。 rsync命令有很多優化來傳輸更改後的數據。例如rsync的可以同步遠程目錄到本地目錄是這樣的:
rsync -auvC [email protected]:/remote/foo/ /local/foo/
我最終不需要實現並行ftp下載,但是從ruby裏面使用rsync或者其他工具會很好。 –
在Curb看看。它是Curl的包裝,可以並行進行多個連接。
這是one of their examples修改後的版本:
require 'curb'
urls = %w[
http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.bz2
http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
]
responses = {}
m = Curl::Multi.new
# add a few easy handles
urls.each do |url|
responses[url] = Curl::Easy.new(url)
puts "Queuing #{ url }..."
m.add(responses[url])
end
spinner_counter = 0
spinner = %w[ |/- \ ]
m.perform do
print 'Performing downloads ', spinner[spinner_counter], "\r"
spinner_counter = (spinner_counter + 1) % spinner.size
end
puts
urls.each do |url|
print "[#{ url } #{ responses[url].total_time } seconds] Saving #{ responses[url].body_str.size } bytes..."
File.open(File.basename(url), 'wb') { |fo| fo.write(responses[url].body_str) }
puts 'done.'
end
這將拉動中都Ruby和Python源(這是相當大的,因此他們將需要大約一分鐘,這取決於你的互聯網連接和主辦)。直到最後一個塊出現時,纔會看到任何文件出現。
- 1. 遞歸從Dropbox下載大文件夾
- 2. 嘗試從ftp遞歸下載特定文件並在其上運行命令
- 3. 文件夾下載爲ftp文件
- 4. 如何用ruby Net :: FTP刪除ftp中的空文件夾?
- 5. 從ftp下載csv文件與ruby sinatra
- 6. 從FTP服務器遞歸下載文件
- 7. 遞歸ftp下載,然後解壓GZ文件
- 8. 在ruby中下載多個FTP文件,如d * .txt
- 9. 使用ssh打印遞歸文件夾/文件連接ftp
- 10. 遞歸文件夾
- 11. 如何在Perl腳本中遞歸查找文件/文件夾?
- 12. 使用Powershell下載FTP文件夾中的所有文件
- 13. 從SSIS中的多個FTP文件夾下載文件
- 14. 如何遞歸刪除文件夾?
- 15. 如何從FTP服務器下載文件夾
- 16. 如何從ftp下載最新的文件夾
- 17. 我如何使用FTPwebRequest在C#中使用其子文件夾和文件下載FTP根文件夾
- 18. 如何避免將文件下載到下載文件夾,並只下載到其他特定文件夾#
- 19. 以遞歸方式下載所有內容的文件夾,Sharpbox
- 20. C++ FTP WinINet,無法從FTP服務器下載文件夾
- 21. 在node.js中遞歸複製文件夾
- 22. 如何從Ftp下載Zip文件#
- 23. 如何從ftp下載文件?
- 24. 如何遞歸卸載所有node_modules文件夾
- 25. Uzip文件夾遞歸-android
- 26. 遞歸文件夾創建
- 27. 從網頁遞歸下載文件
- 28. 如何從鏈接(ftp)下載zip文件並傳遞用戶名和密碼?
- 29. 遞歸wget控件下載
- 30. 如何遞歸列出文件夾中的文件?
爲什麼必須在Ruby中完成?有很好的工具可以完成它,比如rsync,你可以從Ruby中調用。 –