如何从网站一次下载多个文件

如何从网站一次下载多个文件

如何从网页一次下载多个文件。例如我想从此下载所有插件

到目前为止我所做的是,每次需要文件 url 时,我都会在文件上单击鼠标左键,copy link address然后使用wget并粘贴该地址。这是一项非常累人的工作。

答案1

如果您想在远程目录中下载所有相同的文件扩展名(相同的通配规则),您可以使用以下命令:

 wget -r -l1 --no-parent --no-check-certificate  -Aperl-*.rpm https://mirror.cpsc.ucalgary.ca/mirror/fedora/linux/releases/28/Everything/x86_64/os/Packages/p/ 

这将从目录下载所有 perl-*.rpm 软件包。

答案2

创建一个links.txt包含 URL 的文件,然后运行

while IFS= read -r line; do
    wget "$line"
done <links.txt

这将为wget文件中的每个链接运行命令。

答案3

您可以分析一下目标页面返回的 htms,并使用 bash utils 进行一些操作。这应该有效:

for i in $(curl https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/  | grep net.sf.files | awk -F "=" '{print $2}' | jq '.[].full_path' | awk -F '"' '{printf("https://sourceforge.net/projects/geoserver/files/%s\n",$2)}') ; do curl -o $(echo $i | awk -F '/' '{print $NF}') -L ${i} ; done

答案4

作为替代方案,您可以使用 wget (它不太便携):

curl -sS https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ | sed -rn 's_^.*<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"$_\1_p' | wget -i - --trust-server-names
  • curl 只是检索包含文件列表的 html 页面。
  • sed 命令查找 url 并将其删除。
  • 然后 wget 下载文件列表。

通过将其放入一个名为(有点可重用)的脚本中可能会更容易理解:

#!/bin/bash
if  [[ -z "$1" || -z "$2" || -n "$3" && "$3" != 'test' ]]; then
    echo "Usage:    dlist <htmlsource> <regexp> [test]\n    <htmlsource> can be a local file or url\n   <regex> is the inner part to \"s_^.*${regex}.*\$_\1_p\"\n   [test] is the option to show the files to be download"
else
    regex="s_^.*$2.*\$_\1_p"
    if [[ "$3" == 'test' ]]; then
        echo "Using regex $regex:"
        regex="s_^.*$2.*\$_ \1_p"
        if [[ "$1" == http* ]]; then
            curl -sS "$1" | sed -rn "$regex"
        else
            sed -rn "$regex" "$1"
        fi
    elif [[ "$1" == http* ]]; then
        curl -sS '$1' | sed -rn "$regex" | wget -i - --trust-server-names
    else
        sed -rn "$regex" "$1" | wget -i - --trust-server-names
    fi
fi

可以用它来调用(假设它被命名为列表):

dlist https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ '<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"'

第一个选项只是您想要的文件列表的 url:您还可以保存文件并在命令行上指定。

然后,如果您在文件列表网页(或您下载的副本)上查看源代码,请滚动并找到链接列表,该列表将为您提供要搜索的 URL。制作正则表达式时,用方括号将所需的 url 部分括起来(从 http 之前开始),并将所有 url 发生变化的部分替换为 .*

第二个选项是上面制作的简化正则表达式。

相关内容