使用 Linux 命令行工具恢复失败的下载

使用 Linux 命令行工具恢复失败的下载

如何使用 Linux 命令行工具恢复部分下载的文件?

由于断电,我部分下载了一个大文件,即 900 MB 中的 400 MB,但是当我再次开始下载时,它会从头开始恢复。我如何从 400 MB 开始?

答案1

由于您没有指定,我假设您正在使用wget下载该文件。如果是这种情况,请尝试将其与-c选项一起使用(例如wget -c <URL>)。

请注意,如果使用的协议是 ftp(URL 看起来像ftp://...),则远程服务器有可能使用旧的/古老的 ftp 守护程序,该守护程序不支持恢复下载(无论如何,较新的 ftp 守护程序确实支持它十多年了) ,所以这只是一个很小的机会)。但如果是这种情况,你可能就不走运了。另一方面,如果使用的协议是 http,则应该没有问题。 (更新:根据其他专家(包括下面评论中的 Gilles)的说法,使用 http 时恢复也需要服务器支持,因此这适用于 ftp 和 http)。

祝你好运。

答案2

如果有多个文件需要下载,并且下载在其中一个文件处中断,那么 -c 和 -r 可以提供帮助。

wget -c -r <url>

该命令将检查所有文件并仅下载不完整或未下载的文件。我不得不下载一百多个大文件,并使用以下选项只是为了对服务器友好:

wget -c -r -np -k --wait=15 --limit-rate=50K <url>

答案3

curl -C -

如果你想使用curl而不是wget

curl -C - -o index.html https://example.com

来自man

使用“‐C -”告诉curl 自动找出在哪里/如何恢复传输。然后它使用给定的输出/输入文件来解决这个问题。

我们可以通过以下方式快速而肮脏地测试它:

printf asdf > index.html
curl -C - -o index.html https://example.com

现在index.html开始:

asdfctype html>
<html>

很明显,它在下载时跳过了前 4 个字符,<!do因为文件已经包含了它们,如果没有这些字符,asdf文件将是:

<!doctype html>
<html>

服务能力检查:accept-ranges: bytes

增量下载之所以有效,example.com是因为:

curl -I https://example.com

服务器返回:

accept-ranges: bytes

HTTP header,这意味着curl可以要求ranges:请求从中间开始:

在 Ubuntu 23.10、curl 8.2.1 上测试。

答案4

我知道原来的问题是什么意思,答案是不是 wget -c ...

场景可以这样描述:

# Start mirroring a site
wget -m http://...
# 400MB later wget died or interrupted,
# don't know where it left off, don't care,
# just want to get the remaining 100MB without getting the first 400MB again
wget -nc -r -l inf --no-remove-listing http://...

选项“-r -l inf --no-remove-listing”相当于不带-N参数的-m。添加 -nc 参数可避免保存硬盘驱动器中已有的前 400MB。

相关内容