我正在尝试使用 wget(或 ncftpget)从 NOAA FTP 服务器下载一年的数据。但是,由于 FTP 的开销(我认为),它花费的时间比它应该的要长。例如,这个命令
time wget -nv -m ftp://ftp:email@ftp.ncdc.noaa.gov/pub/data/noaa/2015 -O /weather/noaa/2015
Run Code Online (Sandbox Code Playgroud)
或者类似地,通过 ncftpget
ncftpget -R -T -v ftp.ncdc.noaa.gov /weather/noaa/ /pub/data/noaa/2015
Run Code Online (Sandbox Code Playgroud)
产生的结果。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
Run Code Online (Sandbox Code Playgroud)
当我观看此传输时,每个单独的文件传输速度都非常快(500kb/秒),但下载 12,000 个相对较小的文件的过程会产生大量开销并减慢整个过程。
我的问题:
这是我最终使用其他人的建议解决这个问题的方法。在这种情况下,NOAA 有一个 FTP 和一个 HTTP 资源,因此我编写了一个执行以下操作的脚本:
示例脚本:
# 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
Run Code Online (Sandbox Code Playgroud)
这运行得更快,并且可能对 NOAA 的服务器更友好。甚至可能有一个聪明的方法来摆脱中间步骤,但我还没有找到。