本文目录导读:

在脚本中使用 Curl 下载大文件并实现断点续传,关键参数是 -C(或 --continue-at),以下是一些最佳实践和方法:
基础续传命令
# -C - 表示自动检测断点并续传 curl -C - -O https://example.com/largefile.zip
-C -:自动从上次下载的位置继续-O:保存为原始文件名
完整的脚本示例
#!/bin/bash
URL="https://example.com/largefile.iso"
FILENAME="largefile.iso"
# 检查文件是否存在并获取已下载大小
if [ -f "$FILENAME" ]; then
LOCAL_SIZE=$(stat -c%s "$FILENAME" 2>/dev/null || echo 0)
echo "已下载: $LOCAL_SIZE 字节"
else
LOCAL_SIZE=0
fi
# 使用 -C - 参数进行续传
echo "开始下载 (支持断点续传)..."
curl -C - -o "$FILENAME" "$URL"
# 检查下载是否成功
if [ $? -eq 0 ]; then
echo "下载完成: $FILENAME"
else
echo "下载中断,可重新运行脚本续传"
fi
带重试机制的脚本
#!/bin/bash
URL="https://example.com/largefile.zip"
FILENAME="largefile.zip"
MAX_RETRIES=5
RETRY_DELAY=5
download_with_resume() {
for ((i=1; i<=$MAX_RETRIES; i++)); do
echo "尝试 $i: 开始下载..."
# 使用 -C - 自动续传
curl -C - -o "$FILENAME" "$URL"
# 检查返回码
status_code=$?
if [ $status_code -eq 0 ]; then
echo "下载成功完成!"
return 0
elif [ $status_code -eq 18 ]; then
# 18 表示部分传输,适合重试
echo "部分下载完成,等待 $RETRY_DELAY 秒后重试..."
sleep $RETRY_DELAY
else
echo "错误 $status_code: 下载失败"
if [ $i -lt $MAX_RETRIES ]; then
echo "$RETRY_DELAY 秒后重试..."
sleep $RETRY_DELAY
fi
fi
done
echo "重试次数已达上限,下载失败"
return 1
}
# 执行下载
download_with_resume
带进度显示的版本
#!/bin/bash
URL="https://example.com/largefile.iso"
FILENAME="largefile.iso"
RETRY_COUNT=0
MAX_RETRIES=10
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
echo "下载尝试 $((RETRY_COUNT + 1))/$MAX_RETRIES"
# -L 跟随重定向 | -# 显示进度条 | -C - 续传
curl -L -# -C - -o "$FILENAME" "$URL"
if [ $? -eq 0 ]; then
echo "下载完成!"
break
fi
echo "下载中断,5秒后重试..."
sleep 5
RETRY_COUNT=$((RETRY_COUNT + 1))
done
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
echo "下载最终失败"
exit 1
fi
验证下载完整性
#!/bin/bash
URL="https://example.com/file.iso"
FILENAME="file.iso"
EXPECTED_HASH="abc123..." # 已知的 SHA256 哈希值
# 下载/续传
curl -C - -o "$FILENAME" "$URL"
# 验证完整性
if [ -f "$FILENAME" ]; then
COMPUTED_HASH=$(sha256sum "$FILENAME" | cut -d' ' -f1)
if [ "$COMPUTED_HASH" = "$EXPECTED_HASH" ]; then
echo "文件完整性验证通过"
else
echo "文件损坏,请重新下载"
rm -f "$FILENAME" # 删除损坏文件
fi
fi
关键说明
| 参数 | 作用 |
|---|---|
-C - |
自动从上次中断位置续传 |
-C 1000 |
从指定字节位置开始 |
-o |
指定输出文件名 |
-O |
使用远程文件名 |
-L |
跟随重定向 |
| 显示进度条 |
注意事项
- 服务器支持:续传要求服务器支持
Range请求头(常见于 HTTP/HTTPS 下载) - 文件不完整:如果文件已存在但已下载部分可能损坏,建议先删除再重下
- 进度显示:使用
-o时无法显示进度,可添加 或--progress-bar - 网络中断:Curl 的返回码 18 表示部分传输,适合重试
这种方法非常适合下载 ISO 镜像、数据集、视频等大型文件,可以避免因网络波动导致的重复下载。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播