ファイル転送ツール curl に関する調査ノート。

未整理利用例

まずはネットから利用例をかき集めて観察しよう。man curl を分析するのはその後だ。 以下、HTTP/HTTPS での用例かつダウンロード方向の転送のものを扱いたい。


bash$ curl --version # とにかく細かいバージョン情報
bash$ curl --help # ヘルプを表示

定番オプション。


bash$ curl https://www.example.com # HTTP GET request
bash$ curl --request GET https://example.com # 同じく
bash$ curl -I https://www.example.com # HTTP HEAD request

オプションなし URL 指定のみの呼び出しがいちばん基本的だ。ファイルの中身を標準出力に書き出す。


bash$ curl http://site.{one,two,three}.com
bash$ curl http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
bash$ curl http://www.numericals.com/file[1-100:10].txt
bash$ curl http://www.letters.com/file[a-z:2].txt

URL の一部に [-]{,,,} による範囲指定や要素指定をして、一度に複数のファイルを転送することができる。

  • 十分新しい curl では Python のリストのようにスライスもできる。

bash$ xargs -n 1 curl -O < listurls.txt # URL が書かれたテキストファイル

wget--input-file のようなオプションがないので、こうするしかない?


bash$ curl -o myfile.css https://cdn.keycdn.com/css/animate.min.css # ディスクに名前を付けて保存
bash$ curl -O https://cdn.keycdn.com/css/animate.min.css # ディスクに保存

オプション -o/--output FILE はダウンロードしたファイルをローカルディスク FILE に保存する。 一方、オプション -O/--remote-name はリモートにあるファイル名を活かしてローカルディスクに保存する。

この系譜に連なるオプションとして --remote-name-all というのもある。


bash$ curl -C - -O https://cdn.keycdn.com/img/cdn-stats.png # how to resume
bash$ curl --limit-rate 200K -O https://cdn.keycdn.com/img/cdn-stats.png # 転送速度
bash$ curl -r 0-20000 -o myfile.png https://cdn.keycdn.com/img/cdn-stats.png # ファイルの一部をダウンロード

オプション -C/--continue-at OFFSET は停止していたファイル転送を再開させる。 問題は引数 OFFSET だが、バイト数指定をするらしい。 利用例のように - を指定することで再開場所を curl に特定させることができる。

オプション --limit-rate SPEED で転送速度を指定する。単位は一秒あたりのバイト数。

  • 数字の後に K, M, G を付けるとスケールを指定できる。

オプション -r/--range RANGE で指定ファイルのバイト的部分列を得ることができる。 範囲の指定方法は色々あるのでマニュアルを参照。

  • カンマを使って複数の範囲を指定すると、リクエスト回数がそのぶん増えるようだ。
  • 巨大ファイル用オプション。

bash$ curl --request GET https://www.example.com/
bash$ curl --request POST https://www.example.com/
bash$ curl --request DELETE https://www.example.com/
bash$ curl --request PUT https://www.example.com/

オプション -X/--request METHOD で HTTP リクエスト。


bash$ curl -z 21-Dec-11 http://www.example.com/yy.html
bash$ curl -z -21-Dec-11 http://www.example.com/yy.html

オプション -z/--time-cond DATE-EXPRESSION は、ファイルの更新日時が特定のものより前後か否かで転送するかどうかを決定する。 日付文字列の直前に - を付けるほうが「古いものが欲しい」。

  • 日付の書式は別途文書を参照すること。

bash$ curl -# -o URL  # メーターの代わりにプログレスバー
bash$ curl --silent URL # 何もエコーしない

オプション -#/--progress-bar で転送時の進捗表現をメーターからプログレスバーに代える。 一方、オプション -s/--silent は進捗を表示しない。

  • なお、コマンドライン上で文字列 -# の末尾以降はコメントとみなされない。

参考資料