本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「curl」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、URLを指定してファイルをダウンロードできる「curl」コマンドです。
「curl」コマンドは、さまざまなプロトコルに対応したデータを転送するためのコマンドです。アップロードもできますが、今回はダウンロードについて扱います。
本連載第24回で紹介した「wget」コマンドのように、“HTMLを解析して、リンク先もダウンロードする”ような機能はありませんが、URLに連番を指定するといった使い方ができます。
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エンコードして送る | |
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)
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)
最初の「〜/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.