2012-10-03 89 views
13

我只想要文件夹结构,但我无法弄清楚如何与wget。相反,我用这:wget拒绝仍然下载文件

wget的-R PDF,CSS,GIF,TXT,PNG -np -r http://example.com

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

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

TTP请求中发送,等待响应... 200 OK长度:136796(134K) [应用程序/ x-下载]保存到: “example.com/file.pdf”

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

2012年10月3日3点51分41秒(853字节/秒) - “example.com/file.pdf” 保存[一十三万六千七百九十六分之十三万六千七百九十六]

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

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

+0

可能是你应该在http想问: //unix.stackexchange.com/ –

+0

从客户那里获得结构可能会更好。 'wget',尤其是'-np'选项,可能会漏掉索引文件不直接或间接链接的目录。 –

+1

可能的重复项:http:// stackoverflow。com/questions/10712344/mirror-http-website-excluded-certain-files –

回答

17

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

从在代码注释(recur.c):指定

要么--delete-后,或我们装这个 否则拒绝(例如,通过-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; 
} 
+3

哇!他们应该让拒绝功能像那样工作。但我意识到wget本来就是要完成一项具体任务。谢谢。 –

+0

不客气迈克尔。 –

+0

Upvoting这个答案,因为它是一个很棒的DIY解决方案,但我仍然失望没有更好的办法。 – taranaki