我必须对多个文件设置 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
答案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