将文件中包含的 URL 列表传递给curl

将文件中包含的 URL 列表传递给curl

我必须对多个文件设置 ACL。我已经使用以下命令下载了存储的对象列表。

C:\Users\Gshrivastava\Downloads\curl_748_0>curl  -o urlname.csv -i -k -H "Authorization: HCP bXFl:29def7dbc8892a9389ebc7a5210dd844" -H "Content-Type: application/xml" -H "Accept:application/xml" -d @mqe.xml "http://tenant.hcp3.hdsblr.com/query?prettyprint

然后我将 url 名称排序到一个文本文件中。

ns.tenant.hcp3.hdsblr.com/rest/pic/Cat/images.jpg 
ns.tenant.hcp3.hdsblr.com/rest/pic/Cat/6.png 
ns.tenant.hcp3.hdsblr.com/rest/pic/landscape/9.png 
ns.tenant.hcp3.hdsblr.com/rest/pic/landscape/5.png  

文本文件的内容 >

现在我想使用这个文件作为参数或变量,以便所有文件名都使用 ACL 设置。

curl.exe -k http://ns.tenant.hcp3.hdsblr.com/rest/ACL/filename.ext/?type=acl -i -H "Authorization: HCP YWRtaW4=:29def7dbc8892a9389ebc7a5210dd844" -T acl.xml 

答案1

如果我理解正确的话,您有一个包含 URL 列表(每行一个)的文件,并且您希望将这些 URL 传递给 CURL。

有两种主要方法可以做到这一点:xargs,或与命令替换。和xargs

xargs <urls.txt curl …

通过命令替换:

curl … $(cat urls.txt)

这两种方法都会破坏一些特殊字符,但考虑到 URL 中哪些字符有效,这应该不是问题,除非使用 时xargs,单引号 ( ') 需要编码为%27。或者,使用xargs -l.

请注意,由于这是一个 Unix 站点,因此我假设您正在运行 Unix 变体并从 bash 等 Unix shell 调用这些命令。鉴于您正在运行curl.exe,您似乎正在使用 Windows。如果您要使用 Unix 工具,我建议您从 Unix shell(例如 bash 或 zsh)执行此操作; Windows 没有附带xargs任何更多的内容curl,也cmd没有命令替换(至少不是以相同的形式)。可能有一种方法可以使用 Windows 工具来做到这一点,但我不知道它是什么,而且这里与主题无关。

另外,如果您在 Windows 下使用 Unix 工具,请注意您的 URL 列表使用 Unix 行结尾(仅限 LF),而不是 Windows 行结尾 (CR+LF)。 Unix 工具期望一行以 LF 结尾,并将 CR 视为普通字符。有关更多信息,请参阅目录列出两次以及该网站上的许多其他问题。

答案2

这个命令 xargs -n 1 curl -O < urls.txt

经过戈蒂

来源

答案3

curl 有 -K 选项,您可以在其中传递多个 url,从具有以下格式的文件中读取:

url = url1
# Uncomment if you want to download the file 
# output = "file1"
# Uncomment if your sysadmin only allows well known User Agent 
# user-agent = "Mozilla/5.0"

您也可以使用 xargs (wget - i 风格)

$ xargs -a urls.txt -I{} curl -# -O {}

urls.txt格式:

https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz.sig

使用 HEREDOC

curl -# -K - <<URL
    url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz"
    output = "libsodium-1.0.16.tar.gz"

    url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz.sig"
   output="libsodium-1.0.16.tar.gz.sig"
URL

参考

答案4

您似乎使用的是 Windows 并且正在使用 CMD 提示符。上面的例子假设你有一个linux环境。但如果您想在 CMD 提示符中执行此操作,请创建一个批处理文件(例如mycurlscript.bat)并将其放入其中:

@echo off
for /F "tokens=*" %%A in (urls.txt) do curl.exe -k %%A -i -H "Authorization: HCP YWRtaW4=:29def7dbc8892a9389ebc7a5210dd844" -T acl.xml

然后将要下载的网址列表保存到名为urls.txt.将它们放入与文件相同的目录中acl.xml,并从 CMD 提示符运行:mycurlscript.bat

相关内容