web-dev-qa-db-ja.com

ファイルに含まれる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 
4

私が正しく理解していれば、URLのリスト(1行に1つ)を含むファイルがあり、それらのURLをCURLに渡したいと思います。

これを行うには、主に2つの方法があります: xargs を使用するか、または コマンド置換 を使用します。 xargsの場合:

xargs <urls.txt curl …

コマンド置換あり:

curl … $(cat urls.txt)

どちらの方法もいくつかの特殊文字をマングルしますが、URLで有効な文字が与えられれば、これは問題になりません。ただし、xargsでは、単一引用符(')を%27としてエンコードする必要があります。または、xargs -lを使用します。

これはUnixサイトなので、Unixバリアントを実行していて、bashなどのUnixシェルからこれらのコマンドを呼び出していることを前提としています。 curl.exeを実行している場合、Windowsを使用しているように見えます。 Unixツールを使用する場合は、bashやzshなどのUnixシェルから使用することをお勧めします。 Windowsには、xargsに付属しているcurlが付属していますが、cmdにはコマンド置換がありません(少なくとも同じ形式ではありません)。 Windowsツールでこれを行う方法はおそらくあるでしょうが、私はそれが何であるかわからず、ここではトピックから外れています。

また、WindowsでUnixツールを使用している場合、URLのリストではWindowsの行末(CR + LF)ではなく、Unixの行末(LFのみ)を使用することに注意してください。 Unixツールは、行がLFで終わり、CRを通常の文字として扱うことを期待しています。詳細については、 ディレクトリは2回リストされています およびこのサイトの他の多くの質問を参照してください。

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 {} 

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

参考

1
Sr. Libre