当目录本身没有index.html时,如何使用wget从某个目录下载某些文件?

当目录本身没有index.html时,如何使用wget从某个目录下载某些文件?

StackExchange 上有很多类似的问题,但没有一个解决这个问题。

我想下载目录pdf中的所有文件2007http://www3.cs.stonybrook.edu/~algorith/video-lectures/

因此,我想wget解析上述链接中提供的 html 文件,并且仅跟踪转到目录pdf中文件的链接2007

我使用了以下方法,但没有成功:

wget -r -A pdf -I /2007 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'

您还可以解释一下为什么上面的方法不起作用吗?

答案1

正如 Anthon 所指出的,该-I选项不起作用那样。但是,既然您有一个参考点 - 即~algorith/video-lectures/文件列表,那么有一些选择。一个是使用其他工具解析索引并重新运行 wget。另一个是使用--accept-regex: 它匹配 accept完整网址

来自男人:

--accept-regex urlregex
--reject-regex urlregex
    Specify a regular expression to accept or reject the complete URL.

这应该做你想要的:

wget -r -nd -A pdf --accept-regex "2007/.*\.pdf" 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'

-nd如果您确实想要这些目录,请将其删除。


编辑(以解决评论)

接受与接受正则表达式

这对我来说解释起来有点麻烦,但我会尝试一下。

首先,如果您确实想阅读手册,请使用info.如man(来自 GNU wget)中所述 - (容易被忽视):

SEE ALSO
   This is not the complete manual for GNU Wget.  For more complete information,
   including more detailed explanations of some of the options, and a number of
   commands available for use with .wgetrc files and the -e option, see the GNU
   Info entry for wget.

在这种情况下即:

$ info wget "Following Links" "Types of Files"

或者在线的

在这里我们发现,强调我的:

最后,值得注意的是接受/拒绝列表是匹配的两次针对下载的文件:一次根据 URL 的文件名部分,确定是否应该首先下载该文件;然后,在接受并成功下载后,还会根据接受/拒绝列表检查本地文件的名称,以确定是否应将其删除。

它进一步解释说,这背后的理由是

  1. .htm.html文件是总是无论接受/拒绝规则如何都下载。
  2. 他们应该被删除正在下载并扫描链接(如果它们确实与接受/拒绝列表匹配)。

因此:HTML 文件总是被下载。下载后,仅根据文件名进行匹配。

不确定这有多大帮助。如果您阅读信息页面,可能会更清楚。这里的鸡和蛋等东西的混合有点复杂。

答案2

-I选项如下所述 man wget

-I list
--include-directories=list
    Specify a comma-separated list of directories you wish to follow
    when downloading.  Elements of list may contain wildcards.

您将此(可以理解)解释为对原始页面上找到的 URL 的过滤器,但这是一厢情愿的想法。它是对子目录的过滤器,wget可以下降到哪个子目录中index.html可以找到哪个子目录。正如您已经注意到的那样,index.htmlhttp://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/

相关内容