suin.io

curlコマンドだけでDropboxにファイルを保存する。例えばmysqldumpの結果など

suin2016年8月4日

curlコマンドだけでDropboxにファイルを保存する方法です。Dropbox APIを使うにはJavaやPHPのライブラリが必要だと思う人も中にはいるかもしれませんが、ファイルのアップロードくらいなら、curlコマンドだけでもシンプルに扱うことができます。

Dropbox APIアクセストークンを取得する

まずは、DropboxのAPIアクセストークンを取得する必要があります。これはDropboxの画面だけでできます。

Dropboxのアプリ追加ページを開き、curl用のアプリを作ります。アプリの初期設定は次の通り。

  1. Choose an API ... Dropbox API
  2. Choose the type of access you need ... App folder
  3. Name your app ... 好きな名前。これがフォルダ名になる。

アプリが作られると、アプリの設定画面が出るので、その画面の中ほどにある「Generate access token」の「Generate」ボタンを押します。ここで生成されるトークンは後ほどDropbox APIを叩くときに使うので控えておきます。

アプリのトークンが生成されると同時に、自分のDropboxの「アプリ」フォルダにアプリ名のフォルダが生成されます。

curlコマンドでDropboxにファイルアップロード

DropboxのファイルアップロードAPIのエンドポイントはhttps://content.dropboxapi.com/1/files_put/autoです。ここにPUTもしくはPOSTします。

次がcurlコマンドは-Tで指定したファイルをDropboxにアップロードするものです。$TOKENには生成したアクセストークンが入ります。

curl -X PUT \
       -H "Authorization: Bearer $TOKEN" \
       -T  /path/to/file \
       https://content.dropboxapi.com/1/files_put/auto/ファイル名

標準入力を使ってファイルをアップロードする場合はこうです:

echo "ファイルの中身" | curl -X PUT \
    -H "Authorization: Bearer $TOKEN" \
    -T - \
    https://content.dropboxapi.com/1/files_put/auto/ファイル名

DropboxをつかってMySQLのバックアップを取る

例えば、curlでDropboxにファイルを保存する方法の応用として、mysqldumpの結果を送り込み、MySQLのDBのバックアップをDropbox上に作ることもできます:1

mysqldump -uroot mydb | curl -X PUT \
    -H "Authorization: Bearer $TOKEN" \
    -T - \
    https://content.dropboxapi.com/1/files_put/auto/mydb-backup.sql

curlでやるメリット

この方法のメリットはコーディングもないので実行までがすごく簡単というところにあると思います。次に、サーバにPHPやRubyをインストールする必要がないので、バックアップのコマンドをcronに仕込むといったことも、サーバのスペックを変更せずに行えます。


  1. curlを使ったMySQLのバックアップを取るDockerイメージも作ってみました→suin/mysql-backup-dropbox