wget拒绝仍然下载文件

时间:2012-10-03 07:58:46

标签: unix wget

我只想要文件夹结构,但我无法弄清楚如何使用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”

     

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

     

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

     

卸下   example.com/file.pdf因为它应该被拒绝。

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

1 个答案:

答案 0 :(得分:21)

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

来自代码内注释(recur.c):

  

指定了--delete-after,或我们加载了它     否则拒绝(例如通过-R)HTML文件就这样我们     可以收获其超链接 - 在任何一种情况下,删除     本地文件。

我们在过去的项目中遇到过这种情况,我们必须镜像一个经过身份验证的网站,wget一直在点击注销页面,即使它意图拒绝那些网址。我们找不到任何更改wget行为的选项。

我们最终得到的解决方案是download,破解并构建我们自己的wget版本。可能有一种更优雅的方法,但我们使用的快速修复方法是将以下规则添加到download_child_p() routine的末尾(根据您的要求进行修改):

  /* 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;
}