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

Loa*_*oax 4 wget

StackExchange 上有许多与此类似的问题,但没有一个解决此问题。

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

所以我想wget解析上面链接中可用的 html 文件,并且只遵循指向目录中pdf文件的链接2007

我使用了以下但没有用:

wget -r -A pdf -I /2007 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'
Run Code Online (Sandbox Code Playgroud)

您还可以解释为什么上述方法不起作用吗?

use*_*890 5

正如安通指出,-I选项不起作用这种方式。但是,由于您有一个参考点——即~algorith/video-lectures/文件列表,有一些选项。一种是用其他工具解析索引,重新运行wget。另一个是使用--accept-regex:它匹配完整 URL上的接受。

来自男人:

--accept-regex urlregex
--reject-regex urlregex
    Specify a regular expression to accept or reject the complete URL.
Run Code Online (Sandbox Code Playgroud)

这应该做你想做的:

wget -r -nd -A pdf --accept-regex "2007/.*\.pdf" 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'
Run Code Online (Sandbox Code Playgroud)

-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.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,即:

$ info wget "Following Links" "Types of Files"
Run Code Online (Sandbox Code Playgroud)

在线

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

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

此外,它继续解释说,这背后的基本原理是

  1. .htm.html文件总是下载,无论接受/拒绝规则。
  2. 如果它们确实与接受/拒绝列表匹配,则应在下载并扫描链接后将其删除。

因此:始终下载 HTML 文件。下载后,匹配仅针对文件名进行。

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