【问题标题】:Using wildcards in wget or curl query在 wget 或 curl 查询中使用通配符
【发布时间】:2013-08-07 15:17:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: curl download wget


    【解决方案1】:

    您不能在 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 的实用程序,它支持通配。看看manpage。还有另一个 question on Linux & Unix 涵盖了它在类似于您的场景中的用法。

    【讨论】:

    • 好的,这允许我指定我只想要.rpm 文件。但是,目录名称不明确的问题仍然存在。我如何告诉wget 目录名称无关紧要,只需跳转到包含 RPM 文件的目录。
    • @mart1n 添加了有关 lftp 的信息来回答,希望对您有所帮助
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      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 列表中的目录。 (?)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 2011-05-04
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 2023-04-07
        • 2011-04-19
        相关资源
        最近更新 更多