如何从网页一次下载多个文件。例如我想从此下载所有插件页。
到目前为止我所做的是,每次需要文件 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 发生变化的部分替换为 .*
第二个选项是上面制作的简化正则表达式。