我是 Wget 新手,我想知道是否有办法从我停止下载的位置恢复下载文件? 例如: 我正在从一个包含如下文件的网站下载一堆文件: 1.pdf 2.pdf 3.pdf 4.pdf
由于某种原因,当 wget 下载了 1,2 个文件时,我停止了下载,并将这些下载的文件移动到了我现在无法访问的另一个存储中。那么我可以运行一个命令来排除我已经下载的前两个文件并从第三个文件开始,依此类推吗?
我已经在使用这个命令了:
wget -m -np -c -U "MyDir" -R "index.html*" "TheURL"
很抱歉我用愚蠢的方式解释了我的问题,并感谢您提前回复。
您已经在使用
-R
选项来拒绝具有特定模式的文件名(您说 -R "index.html*"
来拒绝以 index.html
开头的任何文件名),因此您可以简单地将更多文件名添加到该拒绝列表中,即使用 -R "index.html*,1.pdf,2.pdf"
如果您知道您已经将 1.pdf
和 2.pdf
保存到另一台计算机上,并且您不关心其他目录中具有相同名称的文件。 (我不确定我是否理解您为什么拒绝index.html*
,因为这可能会导致某些文件列表未被扫描。)
对于更复杂的情况(或者如果您只是不想编写很长的
-R
参数),在运行 wget 之前使用 touch
创建空文件,然后删除空文件可能会更容易。这是有效的,因为您使用的是 wget -m
,它(至少在 2001 年后的 wget 版本中)打开 -N
(时间戳检查)——只要服务器支持时间戳(大多数都支持),wget 就会告诉服务器需要该文件仅当它比现有文件的时间戳更新,即“比现在更新”,如果您刚才在其中放置了一个空文件。不过,空文件必须正确命名并位于正确的目录中。
您可能想要进行的另一个调整是将
-m
替换为 -r -nc -l inf
(因为通常 -m
表示 -r -N -l inf
,我建议将 -N
替换为 -nc
)。 -N
检查时间戳,-nc
避免下载已经存在的 any 文件,无论时间戳如何(因此即使服务器不支持时间戳它也能工作),但更重要的是,-nc
会生成您“已经下载并正在扫描链接,而 -N
则没有。 如果您需要缓慢镜像大型服务器,则这与 -w
(--wait
) 结合使用非常有用,因为如果您必须重新启动计算机或其他操作在完成之前,您可以从停止的位置恢复镜像,并且 wget
仍然会考虑上次获取的文件中的任何链接。
另一方面,如果您之前的下载已完成并且您只需要检查更新,则
-N
会更好 - 尽管使用 -N
进行镜像仍然依赖于从 also 具有更新时间戳的页面链接的任何更新文件(如果通过链接到达that页面,而不是直接从您提供的URL访问,那么至少其中一个its链接页面必须also具有更新的时间戳,以便其更新被注意到,依此类推)—目前似乎没有办法告诉 wget 解析 -N
跳过的 HTML 页面,因为它可以解析 -nc
跳过的 HTML 页面。
wget -c https://url.com/filename.ext
在 Debian 12 上测试并终止
wget
然后以 64% 恢复下载原始文件
源 Web 服务器应该支持它:
HTTP request sent, awaiting response... 206 Partial Content
Length: 1222609558 (117M), 43520449 (42M) remaining [application/octet-stream]
来自
man wget
:
-c
--continue
继续获取部分下载的文件。当您想要完成由上一个开始的下载时,这非常有用 Wget 的实例,或由另一个程序。例如:
wget -c ftp://sunsite.doc.ic.ac.uk/ls-lR.Z
如果当前目录中有一个名为 ls-lR.Z 的文件,Wget 将假定它是远程文件的第一部分,并且 将要求服务器从等于偏移量处继续检索 本地文件的长度。