curlブレース構文で複数のファイルをダウンロードします


17

次の構文で2つのファイルをダウンロードしようとしています。

curl -O http://domain/path/to/{file1,file2}

問題は、最初のファイルのみが実際にローカルに保存され、2番目のファイルは単にstdoutに出力されることです。

私はそれを追加する-Oとうまくいくことに気付きました:

curl -OO http://domain/path/to/{file1,file2}

しかし、ファイルの数が増えすぎた場合、これは非実用的ではありませんか?例えば、

curl -O http://domain/path/to/file[1,100]

私の質問は、curl(正しい数を追加せずに-O)複数の個別のファイルを一度にダウンロードする方法は本当にないのですか?


1
なぜforループを使用しないか、代わりにwgetを使用しないのですか?
ルイFリベイロ

1
@RuiFRibeiro(1)はい、ループを使用できます。私はそれcurlを達成できるかどうかだけに興味があります。(2)私はHTTP(s)だけでなく、SFTPなどのFTPプロトコルも検討しています。
ネイツリー

つまり、このような強力なツールでありながら、なぜcurlそれほど難しくない機能に失敗するのでしょうか?
ネイツリー

1
ちょうどそれを明確にする{}[](とも*して?)構文がされ、シェルグロブ/拡張、curlそれらを見ることを得ることはありません、それは同じであるcurl url1 url2
vonbrand

wgetはSSLを処理しません
MikeW

回答:


9

更新:これはcurl 7.19.0で実装されました。@Besworksの回答を参照してください。

マニュアルページによると、複数のO´を使用する場合を除き、元のファイル名を保持する方法はありません。または、独自のファイル名を使用することもできます。

curl http://{one,two}.site.com -o "file_#1.txt"

その結果http://one.site.comに保存されているfile_one.txthttp://two.site.comに保存されていますfile_two.txt

または複数の変数でさえ

curl http://{site,host}.host[1-5].com -o "#1_#2"

その結果http://site.host1.comに保存されているがsite_1http://host.host1.comに保存されているhost_1ようにと。


または、次のようなこともできますcurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
マックスコプラン

23

この質問にはすでに受け入れられた答えがあることを理解していますが、実際にこれを行う方法があることを指摘する必要があります。

この--remote-name-allオプションは、curlを使用した-O場合または--remote-name各ファイルに対して動作するように指示します。

https://curl.haxx.se/docs/manpage.html#--remote-name-all

このオプションは、バージョン7.19.0以降で使用可能です

https://curl.haxx.se/changes.html#7_19_0


0

curlで複数のファイルをダウンロードする別の方法があります。

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

:必須スペースは、異なるURLを区切るために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.