Edited at

cURL のワンライナーで複数ファイルを同時に指定する(複数URL個別指定)


https://hoge.com/fuga.txt https://piyo.com/hogera.txt を1つの curl コマンドでダウンロードしたい。



TL;DR(複数の個別URLを同時に指定)


-O オプションを各々付けて繋げて記載する。(ロングオプション名:--remote-name

ファイル名を指定して保存したい場合は -o オプションを各々つけて記載する。(ロングオプション名:--output



ファイル名をそのまま保存する場合

curl -O https://hoge.com/fuga.txt -O https://piyo.com/hogera.txt



ファイル名を指定して保存する場合

curl -o foo.txt https://hoge.com/fuga.txt -o bar.txt https://piyo.com/hogera.txt



ロングオプションでファイル名をそのまま保存する場合

curl --remote-name https://hoge.com/fuga.txt \

--remote-name https://piyo.com/hogera.txt


ロングオプションでファイル名を指定して保存する場合

curl --output foo.txt https://hoge.com/fuga.txt  \

--output bar.txt https://piyo.com/hogera.txt


URLもロングオプションで指定するタイプ

curl --location https://hoge.com/fuga.txt --output foo.txt \

--location https://piyo.com/hogera.txt --output bar.txt


参考文献


TS;DR

GitHub 上のリリース・ファイルと、その署名や公開鍵など、複数ファイルの個別ダウンロードが面倒になりました同時指定によるダウンロードがシェル操作で必要になりました。できることならワンライナーでコピペピピックしたかったのです。

シェルのデータ転送の王道コマンドラインツールと言えば「wget」と「cURL」です。

いつも使っている wget は機能が豊富で、かゆいところにも手が届くのですが、macOS には wget は標準で入っていません。まっさらな環境でのダウンロードを想定しているため curl を使うことにしました。

curl のマニュアル(man curl)を読むと「URL は好きなだけ記述できます」と書いてあります。


man␣curl

-O, --remote-name

(中略)
You may use this option as many times as the number of URLs you have.

そこで以下のようにしてみたのですが、うまく動きませんでした。

curl -O https://hoge.com/fuga.txt https://piyo.com/hogera.txt

いま思えば「use this option as many times as the number of URLs」とあるので、「このオプションを URL の数だけ使え」ということなのですが、検索猿人なため深く考えずに調べに行ってしまいました。

site:qiita.com curl 複数ファイル ダウンロード」と Qiita 記事に絞ってググってみたのですが、シェル・スクリプトに1つ1つ記入したり、ダウンロード一覧のファイルを別途用意したり、パイプ渡しするものはあれど、同じコマンド行に併記する情報がなかなか見つかりません

そこで Qiita 以外のサイトを検索したら、ドンピシャな英語の記事が。


3. Download Multiple Files

Use following command to download files from multiple files from multiple remote servers using HTTP protocol. The following example will download latest.tar.gz and latest.zip from remote servers and save in current directory with same names.

(筆者訳)

3. 複数ファイルのダウンロード

次のコマンドを使えば、HTTP プロトコルを使用して、複数のリモートサーバーや複数のファイルをダウンロードできます。次の使用例はリモートサーバーから latest.tar.gzlatest.zip をダウンロードし、現在のディレクトリに同じ名前で保存します。

curl -O http://wordpress.org/latest.tar.gz -O http://wordpress.org/latest.zip

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 178 100 178 0 0 202 0 --:--:-- --:--:-- --:--:-- 202
100 178 100 178 0 0 387 0 --:--:-- --:--:-- --:--:-- 387


Oh ...


併せて読みたい



  • -o(小文字のオー)オプションでも複数ダウンロード可能です。