这是一个批量下载文件的 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

关键点:

  1. readarray -t

    • 一次性把清单文件所有行读入数组 lines
    • -t 会去掉每行结尾的换行符。
  2. 跳过空行

    [[ -z "$line" ]] && continue
    
  3. 拆分成数组

    arr=($line)
    
    • 默认按空白字符切分:

      • arr[0] → 输出文件名
      • arr[1] → 下载 URL
  4. 调用 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 去处理。