1.创建 .netrc
文件
nano ~/.netrc
2.在 .netrc
文件中添加以下内容(替换 <username>
和 <password>
为您NASA Earthdata 账号信息)
machine urs.earthdata.nasa.gov
login <username>
password <password>
3.设置文件权限(为了确保 .netrc
文件的安全性,设置其权限为仅当前用户可读写
chmod 600 ~/.netrc
4.验证是否成功
cat ~/.netrc
machine urs.earthdata.nasa.gov
login my_username
password my_password
5.脚本
#!/bin/bash
# 设置下载目录
DOWNLOAD_DIR="./downloads"
mkdir -p "$DOWNLOAD_DIR"
# 输入文件(包含URL列表)
INPUT_FILE="monthly.txt"
# 检查.netrc文件是否存在
if [ ! -f ~/.netrc ]; then
echo "错误:~/.netrc 文件不存在。请按以下步骤操作:"
echo "1. 创建 ~/.netrc 文件并添加:"
echo " machine urs.earthdata.nasa.gov"
echo " login <你的用户名>"
echo " password <你的密码>"
echo "2. 运行命令:chmod 600 ~/.netrc"
exit 1
fi
# 遍历URL列表并下载
while IFS= read -r url; do
# 从URL中提取六位日期(如198001)
date_part=$(echo "$url" | grep -oE '[0-9]{6}\.nc4' | head -1 | sed 's/\.nc4//')
if [ -z "$date_part" ]; then
echo "警告:无法从URL提取日期,跳过:$url"
continue
fi
# 目标文件名(如198001.nc)
new_name="${date_part}.nc"
# 使用wget下载(自动认证)
echo "下载:$url -> $new_name"
wget \
--show-progress \
--load-cookies ~/.urs_cookies \
--save-cookies ~/.urs_cookies \
--keep-session-cookies \
--auth-no-challenge=on \
--netrc \
-O "${DOWNLOAD_DIR}/${new_name}" \
"$url"
# 检查下载结果
if [ $? -eq 0 ]; then
echo "成功:${new_name}"
else
echo "失败:${url}"
fi
done < "$INPUT_FILE"
echo "所有文件下载完成!"