【 curl 】コマンド――さまざまなプロトコルでファイルをダウンロード(転送)するLinux基本コマンドTips(25)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「curl」コマンドです。

» 2016年06月22日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、URLを指定してファイルをダウンロードできる「curl」コマンドです。

curlコマンドとは?

 「curl」コマンドは、さまざまなプロトコルに対応したデータを転送するためのコマンドです。アップロードもできますが、今回はダウンロードについて扱います。

 本連載第24回で紹介した「wget」コマンドのように、“HTMLを解析して、リンク先もダウンロードする”ような機能はありませんが、URLに連番を指定するといった使い方ができます。


curlコマンドの書式

curl -O [オプション] URL

curl [オプション] URL > 保存ファイル名

※[ ]は省略可能な引数を示しています



curlコマンドの主なオプション

 curlコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-O --remote-name 転送元と同じ名前で保存する(「-O」または「-o」を指定しない場合は標準出力)
-o --output ファイル名 保存するファイル名(「-O」または「-o」を指定しない場合は標準出力)
--create-dirs 「-o」でディレクトリを指定した際、そのディレクトリがない場合は作成する
-# --progress-bar 進行状況を「#」文字で表示する
-f --fail 失敗してもエラーメッセージを表示しない
-s --silent 実行中のメッセージを表示しない
-4 --ipv4 IPv4だけを使う
-6 --ipv6 IPv6だけを使う
-A --user-agent "Webブラウザ" 実行時のWebブラウザ名を指定する
-e --referer URL リンク元のURLを指定する
-b --cookie "名前=値" 実行時のクッキーを指定する
--anyauth 複数の認証方法を試す(個別に「--basic」「--digest」「--ntlm」「--negotiate」を指定可)
-C --continue-at バイト数 転送の続きから行う際に、何バイト目から再開するか指定する(「-C -」で自動計算)
-d --data "データ" データをPOSTしたのと同じように送る
-F --form "名前=値" 指定した内容をフォームから入力したのと同じように送る
--data-urlencode "データ" データをURLエンコードして送る


URLを指定してファイルをダウンロードする

 curlはファイルを転送するコマンドですが、wgetコマンド同様、ファイルをダウンロードする際にも便利に使うことができます。

※CentOS 7には両方のコマンドが収録されていますが、ディストリビューションやバージョンによっては、どちらか一方しかインストールされていないかもしれません。



 引数にURLを指定すると、そのURLのファイルをダウンロードします。デフォルトの出力先は「標準出力」なので、リダイレクトで保存するか、「-O」オプションまたは「-o」オプションを指定します。

 「-O」オプションの場合、転送元のファイル名がそのまま使われます。通常はこちらが便利でしょう。「-o」オプションの場合は「-o ファイル名」のように、保存先のファイル名を指定することができます。

コマンド実行例

curl http://…/download.zip > myfile.zip

curl -O http://ftp.gnu.org/gnu/wget/wget-1.18.tar.gz(画面1)


画面1 画面1 「curl」では、URLを指定してファイルをダウンロードできる


ファイルを連番で指定してダウンロードする

 URLに、file1、file2、file3……のように連番が使われている場合は、「[1-100]」のようにまとめて指定することができます。

コマンド実行例

curl -O ftp://ftp.numericals.com/file[1-100].txt

curl -O ftp://ftp.numericals.com/file[001-100].txt

curl -O ftp://ftp.letters.com/file[a-z].txt


 途中のディレクトリを連番で指定することもできます。この場合、「-O」オプションではディレクトリが作成されないので、「-o」オプションを使って次のコマンド実行例のように指定します。

コマンド実行例

curl --create-dirs -o "#1/#2/news#3.html" http://www.atmarkit.co.jp/ait/articles/16[02-06]/[01-31]/news[001-009].html(画面2)


画面2 画面2 ファイルを連番で指定してダウンロードすることも可能

 最初の「〜/16[02-06]」が「1602,1602〜1606」に展開されます。「-o」オプションでは、「#1」の部分が「1602,1602〜1606」に置き換わります。

 2つ目の「[01-31]」が「01〜31」で、「-o」オプションの「#2」に置き換わります。

 3つ目の「news[001-009].html」が「news001.html〜news009.html」となり、「-o」オプションの「news#3.html」も同じ内容に置き換わります。

 また、「-o」オプションでディレクトリを作成したいので、「--create-dirs」オプションを追加しています。

 なお、上記のコマンド実行例にある「www.atmarkit.co.jp」で存在しないファイル名(例えば、「〜/01/news001.html」)を指定すると、「ページが見つかりません」というページが開くため、上記のコマンド実行例では「ページが見つかりません」と書かれたhtmlファイルが大量にダウンロードされることになりますのでご注意ください。

 ファイルがあまり連続していない場合はwgetコマンドの方が向いていますし、少数であれば特定の文字列が含まれるファイルを削除するような後処理を入れるとよいでしょう。

 また、大きなファイルを大量にダウンロードするような操作は相手先のサーバに負荷を与えてしまう可能性もありますので、節度を持って実施するようにしてください。本連載では紹介しきれませんでしたが、curlコマンドにはタイムアウトなどのオプションもありますので適宜指定するようにしてください。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。