【数据产品】利用 SFTP 批量下载 CloudSat 数据

CloudSat 是一颗用于全球云观测的卫星,其搭载的云剖面雷达(Cloud Profiling Radar,CPR)能够提供云层垂直结构、云分类和降水等信息。
最近利用Downthemall插件批量下载时遇服务器超时问题,所以转用SFTP方法进行下载,故写此文。
本文以 Windows PowerShell 为例,介绍如何使用 SFTP 登录 CloudSat 数据服务器,并以 2B-CLDCLASS-LIDAR.P1_R05 和 ECMWF-AUX.P_R05 为例,说明单日测试、批量下载、断点续传和结果检查的完整流程。
一、下载前的准备
1. 注册 CloudSat 账号
首先需要在 CloudSat 数据网站注册账号。后续登录 SFTP 服务器时,会使用注册邮箱转换后的用户名。
2. 查询当前公网 IPv4
在 PowerShell 中运行:
1 curl.exe -4 https://checkip.amazonaws.com
也可以使用其他 IPv4 查询服务:
1 2 curl.exe -4 https://icanhazip.comcurl.exe -4 https://api.ipify.org
CloudSat 的 SFTP 访问与登记的公网 IPv4 有关。因此,填写 SFTP Key 信息时登记的 IP,必须与实际下载时的网络出口 IP 一致。
如果切换了 VPN、校园网、家庭宽带或手机热点,公网 IPv4 可能随之变化。此时需要重新查询 IP,并在 CloudSat 页面更新登记信息。
3. 生成 SSH 密钥
如果电脑中还没有 SSH key,可在 PowerShell 中运行:
1 ssh-keygen -t ed25519
按提示完成创建后,查看公钥:
1 Get-Content $HOME\.ssh\id_ed25519.pub
将输出的整行公钥复制到 CloudSat 网站的 Add SFTP Key 页面,同时填写刚才查询到的公网 IPv4。
.pub结尾的文件是公钥,可以提交给服务器;id_ed25519是私钥,必须妥善保管,不要上传或发送给他人。
二、测试 SFTP 登录
CloudSat 的 SFTP 用户名由注册邮箱转换而来:将邮箱中的 @ 替换为 AT。
例如,注册邮箱为:
1 yourname@example.com
对应的 SFTP 用户名为:
1 yournameATexample.com
登录命令为:
1 sftp yournameATexample.com@www.cloudsat.cira.colostate.edu
首次连接时,系统会询问是否信任服务器指纹:
1 Are you sure you want to continue connecting (yes/no/[fingerprint])?
确认主机信息无误后输入 yes。如果终端出现 sftp> 提示符,说明已经成功进入 CloudSat 服务器。
可以用以下命令检查目录:
1 2 3 4 pwdlscd Datals
这里需要区分两类命令:
- cd 用于切换远程服务器目录;
- lcd 用于切换本地下载目录。
输入 bye 可退出 SFTP。
三、确认数据产品与版本
本文以云分类产品为例,主产品为:
1 2B-CLDCLASS-LIDAR.P1_R05
该产品结合 CloudSat 与 CALIPSO 观测,可提供云分类、云相态、云层顶底高度等信息。如果后续分析还需要温度场,应下载:
1 ECMWF-AUX.P_R05
CloudSat 目录中同时存在 ECMWF-AUX.P1_R05,但该版本是为 2B-FLXHR-LIDAR.P2_R05 制作的输入数据。当主产品使用 2B-CLDCLASS-LIDAR.P1_R05 时,选择 ECMWF-AUX.P_R05 能够与原产品生产链保持一致。
四、先测试下载一天数据
批量下载前,建议先用一天的数据检查账号权限、远程路径和本地路径是否正确。
首先在 PowerShell 中创建本地目录:
1 2 New-Item -ItemType Directory -Force "E:\CloudSat\2B-CLDCLASS-LIDAR"New-Item -ItemType Directory -Force "E:\CloudSat\ECMWF-AUX"
New-Item是 PowerShell 命令,不能在sftp>提示符下运行。
以 2019 年 2 月 19 日为例,该日是当年第 50 天,即年积日(Day of Year,DOY)050。登录 SFTP 后运行:
1 2 3 4 lcd E:/CloudSat/2B-CLDCLASS-LIDARcd /Data/2B-CLDCLASS-LIDAR.P1_R05/2019/050lsmget *
Windows 本地路径在 SFTP 中建议使用正斜杠 /。
下载 ECMWF-AUX 数据的方法同上。
五、批量下载指定日期范围
当需要下载连续数月的数据时,逐日手动进入目录效率很低。OpenSSH SFTP 支持通过 -b 选项读取批处理文件,因此可以用 PowerShell 自动生成下载指令。
以 2019 年 2 月 19 日至 6 月 20 日为例,对应的 DOY 范围为 050-171。
1. 批量下载 2B-CLDCLASS-LIDAR
在 PowerShell 中运行:
1 2 3 4 5 6 7 $batch = @('lcd E:/CloudSat/2B-CLDCLASS-LIDAR')50..171 | ForEach-Object { $doy = $_.ToString('000')doy/*"}$batch += 'bye'HOME\cloudsat_cldclass_lidar_2019.txt" -Encoding ascii
然后执行:
1 sftp -b "$HOME\cloudsat_cldclass_lidar_2019.txt" yournameATexample.com@www.cloudsat.cira.colostate.edu
2. 批量下载 ECMWF-AUX
生成第二个批处理文件:
1 2 3 4 5 6 7 $batch = @('lcd E:/CloudSat/ECMWF-AUX')50..171 | ForEach-Object { $doy = $_.ToString('000')doy/*"}$batch += 'bye'HOME\cloudsat_ecmwf_2019.txt" -Encoding ascii
开始下载:
1 sftp -b "$HOME\cloudsat_ecmwf_2019.txt" yournameATexample.com@www.cloudsat.cira.colostate.edu
上述脚本中有两个关键细节:
- get -a 使用断点续传模式,重新执行批处理文件时,可继续下载未完成的文件;
-
命令前的 -表示某条指令失败后仍继续执行,避免因某个 DOY 目录不存在而中断整个任务。
因此,-get -a 很适合用于 CloudSat 这类可能存在缺日、缺轨或网络中断的长时间序列下载任务。
六、检查下载结果
下载结束后,可以在 PowerShell 中统计文件数量和总大小:
1 2 3 4 5 Get-ChildItem "E:\CloudSat\2B-CLDCLASS-LIDAR" -File | Measure-Object -Property Length -SumGet-ChildItem "E:\CloudSat\ECMWF-AUX" -File | Measure-Object -Property Length -Sum
两种产品通常共享相同的时间戳和轨道号。例如:
1 2019050022421_68243
对应的两个文件可能为:
1 2 2019050022421_68243_CS_2B-CLDCLASS-LIDAR_GRANULE_P1_R05_E08_F03._hdf_2019050022421_68243_CS_ECMWF-AUX_GRANULE_P_R05_E08_F03.hdf
查询某个轨道文件是否存在:
1 2 3 4 5 Get-ChildItem "E:\CloudSat\2B-CLDCLASS-LIDAR" -File | Where-Object Name -Like "2019050022421_68243*"Get-ChildItem "E:\CloudSat\ECMWF-AUX" -File | Where-Object Name -Like "2019050022421_68243*"
后续进行云相态、云顶温度等联合分析时,建议按时间戳和轨道号对两类产品取交集,只处理配对成功的 granule。
七、常见问题与解决方法
1. SSH 配置文件报错
如果出现:
1 C:\Users\...\.ssh/config line 4: no argument after keyword "port"
说明 $HOME\.ssh\config 中存在缺少参数的 Port 配置。打开文件:
1 notepad "$HOME\.ssh\config"
删除空的 Port 行,或将其改为:
1 Port 22
也可以在当次连接中临时忽略本地 SSH 配置文件:
1 sftp -F NUL yournameATexample.com@www.cloudsat.cira.colostate.edu
2. 22 端口连接超时
如果出现:
1 ssh: connect to host www.cloudsat.cira.colostate.edu port 22: Connection timed out
先检查当前网络能否访问 22 端口:
1 Test-NetConnection www.cloudsat.cira.colostate.edu -Port 22
如果返回 TcpTestSucceeded : False,可按以下顺序排查:
-
重新查询公网 IPv4,确认与 CloudSat 登记的 IP 一致; -
暂停 VPN 或代理,检查出口 IP 是否改变; -
检查校园网或单位网络是否限制出站 TCP 22 端口; -
切换手机热点或其他网络后,更新登记 IP 再次测试。
3. 某些日期提示目录不存在
批量下载时可能看到:
1 stat remote: No such file or directory
这不一定是脚本错误,也可能是当天没有对应的远程数据目录。只要使用了带前缀 - 的下载指令,后续日期仍会继续执行。建议保留终端日志,便于后续核查缺失日期和轨道。
4. 提示文件未修改
如果使用 get -a 时出现:
1 File "...hdf" was not modified
通常说明本地已经存在完整文件,无需重复下载。

夜雨聆风