18

我只想要文件夹结构,但我不知道如何使用 wget。相反,我正在使用这个:

wget -R pdf,css,gif,txt,png -np -r http://example.com

应该拒绝-R之后的所有文件,但在我看来wget仍然下载文件,然后将其删除。

有没有更好的方法来获取文件夹结构?

TTP 请求已发送,等待响应... 200 OK 长度:136796 (134K) [application/x-download] 保存到:“example.com/file.pdf”</p>

100%[======================================>] 136,796 853K/s 在 0.2s

2012-10-03 03:51:41 (853 KB/s) - “example.com/file.pdf” 已保存 [136796/136796]

删除 example.com/file.pdf,因为它应该被拒绝。

如果有人想知道这是给客户的,他们可以告诉我结构,但是因为他们的 IT 人员必须这样做,所以这很麻烦,所以我想自己得到它。

4

1 回答 1

28

这似乎wget是设计工作的方式。执行递归下载时,仍会下载与拒绝列表匹配的非叶子文件,以便收集它们作为链接,然后将其删除。

从代码内注释(recur.c):

要么指定了 --delete-after,要么我们加载了这个被拒绝(例如,被 -R)拒绝的 HTML 文件,以便我们可以获取它的超链接——在任何一种情况下,删除本地文件。

我们在过去的一个项目中遇到过这种情况,我们必须镜像一个经过身份验证的站点,并wget不断点击注销页面,即使它本应拒绝这些 URL。我们找不到任何选项来改变wget.

我们最终得到的解决方案是下载、破解和构建我们自己的wget. 可能有一种更优雅的方法,但我们使用的快速修复方法是将以下规则添加到download_child_p()例程的末尾(修改以符合您的要求):

  /* Extra rules */
  if (match_tail(url, ".pdf", 0)) goto out;
  if (match_tail(url, ".css", 0)) goto out;
  if (match_tail(url, ".gif", 0)) goto out;
  if (match_tail(url, ".txt", 0)) goto out;
  if (match_tail(url, ".png", 0)) goto out;
  /* --- end extra rules --- */

  /* The URL has passed all the tests.  It can be placed in the
     download queue. */
  DEBUGP (("Decided to load it.\n"));

  return 1;

 out:
  DEBUGP (("Decided NOT to load it.\n"));

  return 0;
}
于 2012-10-03T08:41:38.790 回答