StackExchange 上有很多类似的问题,但没有一个解决这个问题。
我想下载目录pdf
中的所有文件2007
http://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 的文件名部分,确定是否应该首先下载该文件;然后,在接受并成功下载后,还会根据接受/拒绝列表检查本地文件的名称,以确定是否应将其删除。
它进一步解释说,这背后的理由是
.htm
和.html
文件是总是无论接受/拒绝规则如何都下载。- 他们应该被删除后正在下载并扫描链接(如果它们确实与接受/拒绝列表匹配)。
因此: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.html
在http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/