【问题标题】:how to download batch of data with linux command line?如何使用 linux 命令行下载批量数据?
【发布时间】:2016-09-11 00:41:33
【问题描述】:

例如,我想从以下位置下载数据: http://nimbus.cos.uidaho.edu/DATA/OBS/

有链接:

http://nimbus.cos.uidaho.edu/DATA/OBS/pr_1979.nc

到

http://nimbus.cos.uidaho.edu/DATA/OBS/pr_2015.nc

如何编写脚本来下载所有这些?与wget?以及如何循环从1979年到2015年的链接?

【问题讨论】:

  • 该范围是否只有 1979-2015,或者您是否正在寻找更动态的东西来检查是否首先存在年份?
  • 嗯,是的,对于这个例子,为了简单起见,我可以用眼睛检查一下。所以只需寻找循环代码。也许像wget http://nimbus.cos.uidaho.edu/DATA/OBS/pr_*.nc或wget .../pr_[1979-2015].nc这样的脚本

标签: linux bash batch-processing


【解决方案1】:

wget 可以将文件作为输入,其中包含每行的 URL。

wget -ci url_file

-i:输入文件
-c:恢复功能

所以您需要做的就是将 URL 放入一个文件中,然后将该文件与 wget 一起使用。

像Jeff Puckett II's answer 这样的简单循环足以满足您的特定情况,但如果您碰巧处理更复杂的情况(随机网址),此方法可能会派上用场。

【讨论】:

  • 非常感谢您的回答!这实际上给我带来了另一个(两个)问题很长一段时间(我通常用手做T.T):1.如何创建具有重复内容的文件“...pr_1979.nc \n ...\n ...pr_2015.nc”? 2. 如何创建 30 多个名称为“1979.txt”、内容为“http.../pr_1979.nc”的文件?好吧,我想我可以使用 R 来连接长内容字符串和变量,比如 x=1979。但我认为这不是通常的做法。由于我不是计算机科学专业的,所以我不熟悉如何创建一批文件。 (也许,极客使用 vim 来做到这一点?)
  • 好的,所以也许,根据上面的答案,它可能类似于循环中的echo $text1$i$text2 >> filename$i ;。
  • @breezeintopl :是的,但它违背了目的(为每个链接创建每个文件)。filename$i 应该是 filename 以便所有链接进入同一个文件。虽然我通常使用文本编辑器从 html 源中提取 URL,通常使用 sed。
  • 好的,知道了。非常感谢!
【解决方案2】:

可能类似于迭代预定义系列的 for 循环。

未经测试的代码:

for i in {1979..2015}; do
  wget http://nimbus.cos.uidaho.edu/DATA/OBS/pr_$i.nc
done

【讨论】:

  • 您可能也对这个答案感兴趣stackoverflow.com/questions/169511/…
  • 谢谢!这很有帮助!你有任何关于学习这种 bash 代码的建议文档或书籍或教程吗?
  • @breezeintopl 老实说,不是真的。您可以尝试在softwarerecs.stackexchange.com 上将其作为问题发布。就我个人而言,我只是在堆栈溢出中搜索我需要做的任何事情,而答案通常已经在这里了。
猜你喜欢
  • 2017-03-06
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多