Ubuntu18.04でrcloneを使ってクラウドストレージをローカルから操作する

公開日:2018/06/30 更新日:2018/06/30
Ubuntu18.04でrcloneを使ってクラウドストレージをローカルから操作するのサムネイル

はじめに

現在は色々なクラウドストレージがあり、1つだけでなくいくつかを使っている人が多いと思います。私もDropbox、Box、Onedriveを主に使っています。Ubuntuを常用するようになってから、BoxのLinux向けクライアントがないために困っていたところ、rcloneというものを見つけて使い始めてみたのでメモします。なお、この記事ではBoxを使うことを前提とし、ローカルのUbuntuからrcloneを使ってBoxのファイルをローカルにコピーしたり、マウントしたりするところまでをメモします。 なお、この記事に書いている内容では、WindowsのBoxクライアントやDropboxクライアントアプリのように、一度アプリをインストールすれば後はファイルの更新、削除、追加に合わせて自動で同期してくれるところまでは実現できず、全て手作業でのコマンド実行が必要になります。自動化したい場合などはcronなどを使って別途作業が必要になります。この記事は、あくまでrcloneのインストールと基本的な使い方を知る程度に参考にしてもらえればと思います。

2019/9/17 追記

Rclone BrowserというGUIでrcloneを使用できるアプリもあります。興味のある方は以下を見てみてください。

www.virment.com

Linuxでは公式に用意されているクラウドストレージアプリは多くありません。ただ、rcloneとRclone Browserを使用すれば、色々なクラウドストレージを便利に使用できます。ここでは、Rclone Browserのインストール手順と簡単な使い方をまとめます。

環境

以降の作業は全てUbuntu18.04で実施しました。

rcloneのインストール手順

インストールは公式サイトの手順に従って行いました。 rclone 公式ドキュメント

手順は簡単で、以下のコマンドを実行すれば完了です。以下はcurlでインストール用のスクリプトファイルを取ってきてそれをそのまま実行しています。

$ curl https://rclone.org/install.sh | sudo bash
[sudo] user のパスワード:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4178  100  4178    0     0   2091      0  0:00:01  0:00:01 --:--:--  2090
...(以下、省略)...

インストールがうまくいかない場合

もし上記コマンドを実行しても何も進まないなど、やたら時間がかかる場合は、以下のように1つづつコマンドを実行することでもインストール可能です。 まず、必要なファイルをこちらの公式サイトからダウンロードしておきます。 debファイル、rpmファイルなどもダウンロードできますが、ここではzipファイルをダウンロードしました。2018年6月26日時点だと、rclone-v1.42-linux-amd64.zipという名前のzipファイルになります。 あとは、以下のコマンドを順番に実行していけば問題なくインストールできると思います。

$ unzip rclone-v1.42-linux-amd64.zip 
Archive:  rclone-v1.42-linux-amd64.zip
   creating: rclone-v1.42-linux-amd64/
  inflating: rclone-v1.42-linux-amd64/README.html  
  inflating: rclone-v1.42-linux-amd64/rclone  
  inflating: rclone-v1.42-linux-amd64/rclone.1  
  inflating: rclone-v1.42-linux-amd64/README.txt  

解凍してできたディレクトリに移動して中身を見てみると以下のようになっています。

$ cd rclone-v1.42-linux-amd64/
$ ls
README.html  README.txt  rclone  rclone.1

このディレクトリにあるrclone/usr/binに移動し、実行権限を与えます。

$ sudo cp rclone /usr/bin/
$ sudo chown root:root /usr/bin/rclone
$ sudo chmod 755 /usr/bin/rclone

あとは以下コマンドでマニュアルを登録しておきます。

$ sudo cp rclone.1 /usr/local/share/man/man1/
$ sudo mandb

以上でrcloneのインストールは完了です。

rcloneの設定ファイルを作成する

rcloneでは、様々なクラウドストレージに対応しています。詳しくは公式サイトにのっています。 そして各クラウドストレージ用にrcloneからアクセスして同期できるようにするには、設定ファイルを作成する必要があります。 この設定ファイルの作成は簡単です。はじめに、rclone configというコマンドで設定ファイルを作成します。 これを実行すると、以下のように設定ファイルがない場合は3択が表示され、入力待ち状態になります。 ここでは、新しい設定ファイルを作成するためにn) New remoteを選択します。そのために、n/s/q> nと入力してEnterを押します。

$ rclone config
2018/06/26 17:58:52 NOTICE: Config file "/home/username/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n (nでEnter)

続いて以下のように設定の名前を入力するよう求められます。ここでは、適当にboxremoteとしました。

name>boxremote

次にストレージのタイプを選択します。以下のように対応しているストレージの種類が表示されるので、目的のものを見つけて、ダブルクォーテーションで囲まれている部分を入力してEnterを押します。以下では、Boxを指定するためにboxと入力しています。Google Driveの場合は、drive、Onedriveの場合はonedriveと入力してEnterします。

Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Alias for a existing remote
   \ "alias"
 2 / Amazon Drive
   \ "amazon cloud drive"
 3 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
   \ "s3"
 4 / Backblaze B2
   \ "b2"
 5 / Box
   \ "box"
 6 / Cache a remote
   \ "cache"
 7 / Dropbox
   \ "dropbox"
 8 / Encrypt/Decrypt a remote
   \ "crypt"
 9 / FTP Connection
   \ "ftp"
10 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
11 / Google Drive
   \ "drive"
12 / Hubic
   \ "hubic"
13 / Local Disk
   \ "local"
14 / Mega
   \ "mega"
15 / Microsoft Azure Blob Storage
   \ "azureblob"
16 / Microsoft OneDrive
   \ "onedrive"
17 / OpenDrive
   \ "opendrive"
18 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
19 / Pcloud
   \ "pcloud"
20 / QingCloud Object Storage
   \ "qingstor"
21 / SSH/SFTP Connection
   \ "sftp"
22 / Webdav
   \ "webdav"
23 / Yandex Disk
   \ "yandex"
24 / http Connection
   \ "http"
Storage>box

次に、Box App Client ID、Box App Client Secretを聞かれますが、これは何も入力せずにEnter押すだけでOKです。

Box App Client Id - leave blank normally.
client_id> 
Box App Client Secret - leave blank normally.
client_secret> 

すると以下のように、Yes、Noの2択が表示されます。ここは、rcloneからのアクセスをBox側で許可するための設定を行う部分で、Yes、すなわちyを入力してEnterするとブラウザが起動しBoxへのログイン画面が表示されます。 もし、遠隔のサーバにターミナルからアクセスしていてブラウザを開けない場合などはNo、nを入力してEnterします。 ここでは、yで進めます。

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...

以下のようにBoxのログイン画面が表示されるので、自分のアカウント情報を入力して「承認」をクリックします。

1-boxlogin-1024x665.png

以下のように確認画面がでるので、「Boxへのアクセスを許可」をクリックします。 2-allow-box.png

成功すると以下のようにブラウザに「Success」と表示されて、 3-success-box.png

ターミナルにも続きが表示されます。最後にy入力してセットアップ完了です。

(...上省略...)
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
--------------------
[boxremote]
type = box
client_id = 
client_secret = 
token = {"access_token":"drrrrre3453453;46l34","token_type":"bearer","refresh_token":";eeieeeieiwwwtkweutwkutewkutkewutuwkeutkuwkeutkwuetkuwektu","expiry":"2018-06-26T19:15:02.68246701+08:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

yと入力すると、以下のように現在のリモートリストが表示され最初のメニューに戻ります。さらに追加する場合は同じプロセスを行います。ここでは、qを入力して作業を完了します。

Current remotes:

Name                 Type
====                 ====
boxremote            box

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

rcloneの使い方

rcloneではかなり豊富なコマンド、機能が用意されています。ここでは基本的なコマンドのみ載せます。

ディレクトリ一覧を取得

rclone lsdによってリモートディレクトリのディレクトリ一覧のみを取得できます。なお、以下のboxremoteは上記で前章の設定作業の最初のほうで指定したnameになります。
$ rclone lsd boxremote:
          -1 2018-06-14 11:52:44        -1 dir1
          -1 2017-11-26 20:35:32        -1 dir2
          -1 2017-12-08 18:44:08        -1 dir3

上記はboxremoteのルートディレクトリ配下にあるディレクトリ一覧を取得していますが、以下のように特定のディレクトリ配下のディレクトリ一覧を取得することももちろんできます。 以下の場合は、dir1配下のディレクトリ一覧を取得しています。
$ rclone lsd boxremote:/dir1
          -1 2018-06-14 11:52:44        -1 subdir11
          -1 2017-11-26 20:35:32        -1 subdir12
          -1 2017-12-08 18:44:08        -1 subdir13

ファイル一覧を取得

rclone lsを使うと、ディレクトリではなくファイル一覧を取得します。なお、デフォルトでは、サブディレクトリ内にあるファイルもすべて再帰的に取得します。
$ rclone ls boxremote:/dir1
          -1 2018-06-14 11:52:44        -1 file1
          -1 2017-11-26 20:35:32        -1 file2
          -1 2017-12-08 18:44:08        -1 file3
          -1 2018-06-14 11:52:44        -1 subdir11/subfile11
          -1 2017-11-26 20:35:32        -1 subdir12/subfile12
          -1 2017-12-08 18:44:08        -1 subdir13/subfile13

もしサブディレクトリのファイルまでは取得したくない場合は、以下のように--max-depth 1オプションで探索するサブディレクトリの階層を指定できます。ディレクトリ名は取得されません。以下の場合は、dir1直下にあるファイルのみを表示します。

$ rclone ls --max-depth 1 boxremote:/dir1
          -1 2018-06-14 11:52:44        -1 file1
          -1 2017-11-26 20:35:32        -1 file2
          -1 2017-12-08 18:44:08        -1 file3

より詳細なファイル一覧を取得

以下のようにrclone lsl を使うことでタイムスタンプ、ファイルサイズを表示します。
$ rclone lsl boxremote:/dir2
    14152 2015-03-16 13:11:08.000000000 test1.html
    26157 2015-03-17 10:47:53.000000000 test2.html
    12105 2015-03-16 12:17:11.000000000 test3.html

他にも、SON形式でファイル一覧を取得するlsjsonなどのコマンドも用意されています。

指定したリモートのフォルダをローカルの指定したフォルダにコピーする

rclone copyを使うと、リモートディレクトリの中身をローカルにコピーできます。以下では、リモートにあるdir1をローカルのdestdirにコピーしています。
$ rclone copy boxremote:/dir1 ./destdir

なお、上記のようにオプションを与えない場合は進捗が表示されずわかりにくいため、以下のように-vオプションをつけることで進捗を表示できます。

$ rclone copy -v boxremote:/dir1 ./destdir
2018/06/26 22:45:46 INFO  : test1.html: Copied (new)
2018/06/26 22:45:47 INFO  : test2.txt:  Copied (new)
(...省略...)
2018/06/26 22:46:23 INFO  : test3.html: Copied (new)
2018/06/26 22:46:23 INFO  : 
Transferred:   306.128 kBytes (7.198 kBytes/s)
Errors:                 0
Checks:                 0
Transferred:          117
Elapsed time:       42.5s

リモートのディレクトリをローカルにマウントする

mountを使うことでローカルの指定したディレクトリにマウントすることができます。以下では、この記事内で作成したboxremoteのルートディレクトリを./mntpointというローカルのディレクトリにマウントしています。これにより、ファイルを追加したり修正したりすればそのままリモートの中身も反映され、削除すれば当然ながらリモートからも削除されます。なお、ここで使用しているrclone mountは、まだ実験的な機能であり、思いがけない動作をする可能性があるのでそれを承知の上使ってください。
$ rclone mount boxremote:/ ./mntpoint &

まとめ

rcloneは他にも色々なクラウドストレージに対応しており、また豊富なコマンドが用意されていて多機能です。rcloneをcronなどと組み合わせれば、自動バックアップ作成など色々と応用できそうです。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。