在wget或curl查询中使用通配符

时间:2013-08-07 15:17:21

标签: curl download wget

从目录下载时是否可以在wget查询中使用通配符?基本上,我有一个网站,比如www.download.example.com/dir/version/package.rpm。但是,版本目录一直在变化,有时包含多个RPM包。是否只有一个wget查询只能获取version目录中的所有包而不知道该版本是什么?在我的理想世界中,查询将类似于:

wget www.download.example.com/dir/*/*.rpm

如果有办法用curl执行此操作,那也可以。

3 个答案:

答案 0 :(得分:27)

您不能在wget中使用通配符,但-A标志应该有效。来自wget manpage

  

您想从http服务器上的目录下载所有GIF。您尝试了wget http://www.server.com/dir/*.gif,但这不起作用,因为http检索不支持通配。在这种情况下,使用:    wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

修改:找到related question

关于目录:

有一个名为LFTP的实用程序,它支持globbing。看看manpage。还有另一个question on Linux & Unix涵盖了与您类似的场景中的用法。

答案 1 :(得分:10)

如果您能够在查询中找到模式,则可以使用bash大括号扩展来执行此任务。

例如,在您的情况下,您可以使用以下内容:

wget www.download.example.com/dir/{version,old}/package{00..99}.rpm

此外,您可以将其与-A-R参数结合使用,以过滤结果。

答案 2 :(得分:1)

虽然上述解决方案有效,但是当您只想下载某些目录时它会失败,但不是全部。例如,如果你有:

http://site.io/like/
http://site.io/like2/
http://site.io/nolike/

而是将所需的目录名称放在文本文件中,例如: 的 dirs.txt:

like/
like2/

然后使用wget和以下命令选项-i dirs.txt -B <base-URL>,如下所示:

wget -nH -nc -np -r -e robots=off -R "index.html*" -i dirs.txt -B http://site.io/

因为,我认为您不能使用-A-R列表中的目录。 (?)