准备工作:要是在Ubuntu或者是Debian下,应该系统已经安装了wget这个工具了,要是没有安装,可以用下面的命令进行安装:
- sudo apt-get install wget
- ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
- brew install wget
完成后,在终端输入下列语句,当然也可以先把下列语句保存为一个shell程序文件,并赋予其执行权限,然后再运行。推荐就直接输入:
- #! bin/bash
- for i in {1901..2014}
- do
- cd /Users/Guo/Documents/NCDC
- wget --execute robots=off -r -np -nH --cut-dirs=3 -R index.html http://ftp3.ncdc.noaa.gov/pub/data/noaa/isd-lite/$i/
- cd isd-lite/$i
- mkdir -p /Users/Guo/Documents/NCDC/files/$i
- cp *.gz /Users/Guo/Documents/NCDC/files/$i
- cd /Users/Guo/Documents/NCDC
- rm -r isd-lite/
- done
简单地解释一下:对变量i从1901到2014递增,做后面的循环操作,“/Users/Guo/Documents/NCDC”以及“/Users/Guo/Documents/NCDC/files”是我自己建的文件夹,来用保存数据,所以呢,你要自己建立文件夹来保存数据,“$i”是对变量i当前值的引用、、、
我已经对不“友好”的部分做了优化,让每一年的数据包存入相对应的文件夹,以前我把所有文件包都放在一个文件夹内,才下几十年的数据一打开文件夹直接把我的Finder拖到假死,几分钟之后才醒来,我的是固态硬盘啊!现在有相应的年份文件夹,方便管理数据!
经过这几天的反复下载与删除,但还是没有下载完成,我发现在下载一个数据包特别多的时候,比如超过一W,bash会报一个Argument list too long的错误,这是因为当前年份文件夹下的数据包太多了,超过了bash的默认值。这导致下载完的数据包没有复制到files文件夹下的年份文件夹下,或者不能删除下载的数据包,要解决这个问题有其他的方法来绕过,但是我觉得太麻烦。我就想,干嘛要复制一次呢,我们直接保存原始下载的文件夹就行了嘛,并且是每个年份是分开存储的!并且我会让wget只保存*.gz文件!于是就有了下面的最新最完美版本!
- #! bin/bash
- for i in {1901..2014}
- do
- cd ~/noaa/
- wget --execute robots=off -r -np -nH --cut-dirs=4 -R index.html* http://ftp3.ncdc.noaa.gov/pub/data/noaa/isd-lite/$i/
- done
转自http://blog.csdn.net/lzslywl/article/details/26678731
本文提供了一个Shell脚本用于下载1901年至2014年的NCDC天气数据集,包括安装依赖、脚本解析与数据保存方法。

被折叠的 条评论
为什么被折叠?



