使用 wget 批量下载数据的小脚本
这是一个批量下载文件的 Bash 小脚本,这个脚本的作用很简单:
给一个“下载清单”文本文件,每行写好 保存文件名 + 下载 URL,脚本会逐行读入并用 wget 批量下载,自动命名输出文件。
适合用来批量下载各种公开数据集,这里我用它来下载 Global Wind Atlas v3 的一堆 GeoTIFF 文件。
基本用法
./gen_wget.sh data.tdu.dk.txt
-
第 1 个参数:
list_file,存放“文件名 + URL”的清单文件。 -
如果没给参数,会提示用法并退出:
Usage: ./gen_wget.sh <list_file>
清单文件格式
以 data.tdu.dk.txt 为例,每行一个下载任务:
<保存文件名> <下载URL>
示例(注意:实际使用时 URL 不要带尖括号 < >,这里只是 Markdown 展示):
gwa3_250_wind-speed_100m.tif https://data.dtu.dk/ndownloader/files/17247017
gwa3_250_capacity-factor_IEC1.tif https://data.dtu.dk/ndownloader/files/17281760
...
规则:
- 用空格分隔 文件名 和 URL。
- 一行只对应一个文件。
- 空行会被自动跳过。
关键逻辑拆解
脚本主体如下:
list_file="$1"
readarray -t lines < "$list_file"
for line in "${lines[@]}"; do
[[ -z "$line" ]] && continue
arr=($line)
wget -O "${arr[0]}" "${arr[1]}"
done
关键点:
-
readarray -t- 一次性把清单文件所有行读入数组
lines。 -t会去掉每行结尾的换行符。
- 一次性把清单文件所有行读入数组
-
跳过空行
[[ -z "$line" ]] && continue -
拆分成数组
arr=($line)-
默认按空白字符切分:
arr[0]→ 输出文件名arr[1]→ 下载 URL
-
-
调用 wget
wget -O "${arr[0]}" "${arr[1]}"-O <filename>:指定最终保存的文件名。- 同一个文件名会被覆盖。
Global Wind Atlas v3 示例
数据来源:Global Wind Atlas v3 URL:https://data.dtu.dk/articles/dataset/Global_Wind_Atlas_v3/9420803
可以把官网上想要的所有文件整理到一个 *.txt 里,例如(写成真正可用的格式):
gwa3_250_wind-speed_100m.tif https://data.dtu.dk/ndownloader/files/17247017
gwa3_250_combined-Weibull-k_150m.tif https://data.dtu.dk/ndownloader/files/17603240
gwa3_250_combined-Weibull-k_50m.tif https://data.dtu.dk/ndownloader/files/17602832
...
gwa3_250_air-density_50m.tif https://data.dtu.dk/ndownloader/files/17281961
然后直接:
chmod +x gen_wget.sh # 只需要做一次
./gen_wget.sh data.tdu.dk.txt
等它跑完,当前目录就会出现所有 gwa3_250_*.tif 文件,方便后续用 GDAL / QGIS 去处理。