我在一个名为的文件中有一个 URL 列表urls.txt
。每行包含 1 个 URL。我想使用 cURL 一次性下载所有文件。我似乎无法说出正确的一句话。
I tried:
$ cat urls.txt | xargs -0 curl -O
但这只给了我列表中的最后一个文件。
这对我有用:
$ xargs -n 1 curl -O < urls.txt
我在 FreeBSD 中。您的 xargs 的工作方式可能有所不同。
请注意,这是顺序运行的curl
s,您可能认为它过于沉重。如果你想节省一些开销,下面的方法可能在 bash 中有效:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
这会将您的 URL 列表保存到一个数组中,然后使用选项扩展该数组curl
导致目标被下载。这curl
命令可以获取多个 URL 并获取所有这些 URL,回收现有连接 (HTTP/1.1),但它需要-O
每个选项之前的选项,以便下载并保存每个目标。请注意,某些 URL 中的字符 ] 可能需要转义以避免与您的 shell 交互。
或者,如果您使用 POSIX shell 而不是 bash:
$ curl $(printf ' -O %s' $(cat urls.txt))
这依赖于printf
重复格式模式以耗尽数据参数列表的行为;并非全部都是独立的printf
s 会这样做。如果您遇到问题,您可以使用其他工具:
$ curl $(sed 's/^/-O /' < urls.txt)
请注意,对于非常大的 URL 列表,此非 xargs 方法也可能会遇到系统限制。研究ARG_MAX https://unix.stackexchange.com/q/45143/13377 and MAX_ARG_STRLEN https://unix.stackexchange.com/q/120642/13377如果这是一个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)