Ftp

加速遞歸 FTP

  • January 10, 2015

我正在嘗試使用 wget(或 ncftpget)從 NOAA FTP 伺服器下載一年的數據。但是,由於 FTP 的成本(我認為),它花費的時間比它應該的要長。例如,這個命令

time wget -nv -m ftp://ftp:email@ftp.ncdc.noaa.gov/pub/data/noaa/2015 -O /weather/noaa/2015

或者類似地,通過 ncftpget

ncftpget -R -T -v ftp.ncdc.noaa.gov /weather/noaa/ /pub/data/noaa/2015

產生的結果。53分鐘轉30M!

FINISHED --2015-01-03 16:21:41--
Total wall clock time: 53m 32s
Downloaded: 12615 files, 30M in 7m 8s (72.6 KB/s)

real    53m32.447s
user    0m2.858s
sys 0m8.744s

當我觀看此傳輸時,每個單獨的文件傳輸速度都非常快(500kb/秒),但下載 12,000 個相對較小的文件的過程會產生巨大的成本並減慢整個過程。

我的問題:

  1. 我是否正確評估了情況?我意識到在不知道伺服器的情況下很難分辨,但是在傳輸大量小文件時,FTP 真的很糟糕嗎?
  2. 是否對 wget 或 ncftpget 進行了任何調整,以使它們能夠更好地與遠端 FTP 伺服器配合使用?或者也許是某種並行性?

以下是我最終如何使用其他人的建議來解決這個問題。在這種情況下,NOAA 有一個 FTP 和一個 HTTP 資源,所以我編寫了一個執行以下操作的腳本:

  1. ncftpls 獲取文件列表
  2. sed 完成 http 文件完整列表的文件路徑
  3. aria2c 快速下載它們

範例腳本:

# generate file list
ncftpls ftp://path/to/ftp/resources > /tmp/remote_files.txt

# append the full path, use http
sed -i -e 's/^/http:\/\/www1\.website\.gov\/pub\/data\//' /tmp/remote_files.txt

# download using aria2c
aria2c -i /tmp/remote_files.txt -d /filestore/2015

這執行得更快,可能對 NOAA 的伺服器更友好。甚至可能有一種巧妙的方法可以擺脫中間步驟,但我還沒有找到。

引用自:https://unix.stackexchange.com/questions/177279