curl与git clone断点续传,自动重试

1. curl 断点续传

最近有一个大文件需要使用 curl 下载,但是下载速度很慢,要挂机很长时间,但是又怕 TCP 长连接被打断,因此写了一个自动重试的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

if [ $# -lt 1 ]; then
echo "Usage: $0 <command>"
exit -1
fi

CMD="$@"

echo "Running ${CMD}"
${CMD}

while [ $? -ne 0 ]
do
echo "Rerunning ${CMD}"
${CMD}
done

使用方法:

1
2
chmod +x retry.sh
./retry.sh command

例如执行 curl 大文件下载的命令

1
curl -C - -O https://example.com/file.zip

可以改写为

1
./retry.sh curl -C - -O https://example.com/file.zip

这样就可以保证下载失败时自动重试,直到下载成功为止(return 0)。

2. git clone 断点续传

同样使用以下脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

if [ $# -lt 1 ]; then
echo "Usage: $0 <command>"
exit -1
fi

CMD="$@"

echo "Running ${CMD}"
${CMD}

while [ $? -ne 0 ]
do
echo "Rerunning ${CMD}"
${CMD}
done

不过 git clonecurl 不同,不能简单的使用 ./retry.sh git clone 。具体流程如下

  1. 首先创建一个文件夹,用于存放下载的文件,在文件夹里运行 git init ,初始化一个 git 仓库

  2. 执行 git fetch https://example.com/example.git,下载文件

如果下载失败,会提示

fatal: unable to access ‘https://example.com/example.git/‘: Failed to connect to example.com port 443: Connection refused

此时就可以使用上面所说的脚本,自动重试,直到下载成功为止。

  1. 创建文件,将脚本内容粘贴进去

  2. 给脚本添加可执行权限

1
chmod +x retry.sh
  1. 执行脚本
1
./retry.sh git fetch https://example.com/example.git

成功之后则可以进行下一步

  1. 执行 git checkout FETCH_HEAD

  2. 执行 git remote add origin https://example.com/example.git

  3. 执行 git pull origin master

  4. 执行 git push -u origin master


curl与git clone断点续传,自动重试
https://nacldragon.top/2023/continue-download/
作者
NaCl
发布于
2023年6月21日
许可协议