我怎么搞砸尝试用wget下载特定的文件类型?

时间:2017-12-05 17:09:32

标签: wget

我正在尝试定期存档托管在社区网站上的几种文件类型,我们的管理员已经多年来一直是MIA,以防他死亡或者只是停止为托管付费。

我可以使用wget -r -np -nd -e robots=off -l 0 URL下载我需要的所有文件,但这会留下大约60,000个额外文件,浪费时间下载和删除。

我真的只是寻找扩展名为“tbt”和“zip”的文件。当我在输入中添加-A tbt,zip时,wget只下载一个文件“index.html.tmp”。它立即删除此文件,因为它与指定的文件类型不匹配,然后进程完全停止,wget宣布它已完成。当不包含-A标志时,它不会尝试下载它抓取的任何其他文件。

我做错了什么?为什么以我所做的方式指定文件类型会导致它仅在查看一个文件后完成?

2 个答案:

答案 0 :(得分:0)

当你尝试做类似的事情时,你可能会遇到同样的问题。使用--accept时,wget会根据文件或目录是否以/结尾来确定链接是指文件还是目录。

例如,假设我有一个名为files的目录,以及一个包含以下内容的网页:

<a href="files">Lots o' files!</a>

如果我要使用wget -r请求此操作,那么我wget会很高兴GET /files,看到它是一个包含大量链接的HTML文档,并继续下载这些链接

但是,如果我将-A zip添加到命令行,并使用wget运行--debug,我会看到:

appending ‘http://localhost:8080/files’ to urlpos.
[...]
Deciding whether to enqueue "http://localhost:8080/files".
http://localhost:8080/files (files) does not match acc/rej rules.
Decided NOT to load it.

换句话说,wget认为这是一个文件(没有尾随/)并且它不符合我们的验收标准,因此会被拒绝。

如果我修改远程文件使其看起来像......

<a href="files/">Lots o' files!</a>

...然后wget将关注链接并根据需要下载文件。

如果您需要使用wget,我认为这不是解决此问题的绝佳方法。正如我在评论中提到的,还有其他可用的工具可以更优雅地处理这种情况。

您也可能遇到不同的问题;将--debug添加到命令行的输出可以澄清这种情况。

答案 1 :(得分:0)

我在所有下载链接看起来都像这样的页面上遇到了这个问题:filedownload.ashx?name=file.mp3。解决方案是匹配链接文件和下载文件。所以我的wget accept标志看起来像这样:-A 'ashx,mp3'。我还使用了--trust-server-names标志。这将捕获网页中链接的所有.ashx,然后在wget进行第二次检查时,所有下载的mp3文件都将保留。

作为--trust-server-names的替代方法,您可能还会发现--content-disposition标志很有帮助。这两个标志都有助于将从filedownload.ashx?name=file.mp3下载的文件重命名为file.mp3