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

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

## TL; DR <sub><sup>（複数の個別URLを同時に指定）</sup></sub>

> `-O` オプションを各々付けて繋げて記載する。（ロングオプション名:`--remote-name`）
> 
> ファイル名を指定して保存したい場合は `-o` オプションを各々つけて記載する。（ロングオプション名：`--output`）

```bash:ファイル名をそのまま保存する場合
curl -O https://hoge.com/fuga.txt -O https://piyo.com/hogera.txt
```
```bash:ファイル名を指定して保存する場合
curl -o foo.txt https://hoge.com/fuga.txt -o bar.txt https://piyo.com/hogera.txt
```

```bash:ロングオプションでファイル名をそのまま保存する場合
curl --remote-name https://hoge.com/fuga.txt \
     --remote-name https://piyo.com/hogera.txt
```
```bash:ロングオプションでファイル名を指定して保存する場合
curl --output foo.txt https://hoge.com/fuga.txt  \
     --output bar.txt https://piyo.com/hogera.txt 
```
```bash:URLもロングオプションで指定するタイプ
curl --location https://hoge.com/fuga.txt --output foo.txt \
     --location https://piyo.com/hogera.txt --output bar.txt 
```

### 参考文献

- [How to Download Files with cURL (5 Examples)](https://tecadmin.net/curl-files-download-examples/) @ TecAdmin
- [curl option 覚え書き](https://qiita.com/takayukioda/items/edf371b3566bea64d046#-o-file-%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E4%BF%9D%E5%AD%98) | ダウンロードしたデータをファイルとして保存 @ Qiita

## TS;DR

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

シェルの**データ転送の王道コマンドラインツール**と言えば「[**wget**](https://ja.wikipedia.org/wiki/GNU_Wget)」と「[**cURL**](https://ja.wikipedia.org/wiki/CURL)」です。

いつも使っている `wget` は機能が豊富で、かゆいところにも手が届くのですが、[macOS には **wget は標準で入っていません**](https://qiita.com/KEINOS/items/c82ed038fee1a0b0792e#wget-%E6%9C%AA%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)。まっさらな環境でのダウンロードを想定しているため `curl` を使うことにしました。

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

```text:man␣curl
-O, --remote-name
    （中略）
    You may use this option as many times as the number of URLs you have.
```

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

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

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


「[`site:qiita.com` `curl` `複数ファイル` `ダウンロード`](https://www.google.co.jp/search?q=site:qiita.com+curl+%E8%A4%87%E6%95%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)」と [Qiita 記事に絞ってググって](https://qiita.com/KEINOS/items/63c5f9b1c1f70f1ff531)みたのですが、シェル・スクリプトに１つ１つ記入したり、ダウンロード一覧のファイルを別途用意したり、[パイプ](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%A4%E3%83%97_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))渡しするものはあれど、**同じコマンド行に併記する情報がなかなか見つかりません**。

そこで 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.gz` と `latest.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
> ```
> - [How to Download Files with cURL (5 Examples)](https://tecadmin.net/curl-files-download-examples/) @ TecAdmin

Oh ...

## 併せて読みたい

- `-o`（小文字のオー）オプションでも複数ダウンロード可能です。
  - [curl option 覚え書き](https://qiita.com/takayukioda/items/edf371b3566bea64d046) @ Qiita