gpt4 book ai didi

linux - 使用 Curl 命令行实用程序并行下载

转载 作者:IT王子 更新时间:2023-10-29 00:15:34 26 4
gpt4 key购买 nike

我想从网站下载一些页面,我使用 curl 成功地完成了,但我想知道 curl 是否像大多数一样一次下载多个页面下载管理器,它会加快速度一点点。是否可以在 curl 命令行实用程序中执行此操作?

我当前使用的命令是

curl 'http://www...../?page=[1-10]' 2>&1 > 1.html

我在这里下载 1 到 10 的页面并将它们存储在名为 1.html 的文件中。

此外,curl 是否可以将每个 URL 的输出写入单独的文件,比如 URL.html,其中 URL 是实际的正在处理的页面的 URL。

最佳答案

我的回答有点晚了,但我相信所有现有的答案都有点不足。我这样做的方法是使用 xargs,它能够在子进程中运行指定数量的命令。

我会使用的单行代码很简单:

$ seq 1 10 | xargs -n1 -P2 bash -c 'i=$0; url="http://example.com/?page${i}.html"; curl -O -s $url'

这需要一些解释。 -n 1 的使用指示 xargs 一次处理单个输入参数。在此示例中,数字 1 ... 10 分别进行处理。 -P 2 告诉 xargs 让 2 个子进程一直运行,每个子进程处理一个参数,直到处理完所有输入参数。

您可以将其视为 shell 中的 MapReduce。或者也许只是 Map 阶段。无论如何,这是完成大量工作的有效方法,同时确保您不会用 fork 炸毁您的机器。可以在 shell 中的 for 循环中执行类似的操作,但最终会进行进程管理,一旦您意识到 xargs 的使用有多么出色,这就开始变得毫无意义了。

更新:我怀疑我使用xargs 的示例可以改进(至少在带有-J 标志的Mac OS X 和BSD 上)。使用 GNU Parallel,该命令也不那么笨拙:

parallel --jobs 2 curl -O -s http://example.com/?page{}.html ::: {1..10}

关于linux - 使用 Curl 命令行实用程序并行下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com