9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-08-20

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(小文字のオー)オプションでも複数ダウンロード可能です。
9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?