OdriveでLinux上の写真をAmazon Drive(Photos)にアップロード

## 環境

* OS: Ubuntu 22.04.3 LTS

## odrive.comでの作業

### odriveのアカウント作成

odriveのアカウントがない場合、以下の手順でodriveのアカウントを作成する。
* odrive.comにアクセス
  * https://www.odrive.com/homepage5b
* GET ODRIVEを選択
* SIGN IN WITH AMAZONを選択し、
* 保有するAmazonアカウントの情報を入力し、アクセスを許可
* 確認用Eメールアドレスを入力し、Eメールアドレスに届いたリンクをクリックして認証

### odriveにAmazon Driveをリンク

odriveにAmazon Driveがリンクされていない場合、以下の手順でリンクする。
* odrive.comにログイン
  * https://www.odrive.com/account/myodrive
* Link Storageをクリックし、Amazon Driveを選択して必要事項を入力

### odriveのAuth Keyを作成

以下の手順でodriveのAuth Keyを作成する。
* odrive.comにログイン
  * https://www.odrive.com/account/myodrive
* odriveのAuth Keysのページにアクセス
  * https://www.odrive.com/account/authcodes
* Create Auth Keyをクリックし、Key名を入力し、CREATEを選択

## Linuxでの作業

### odrive Agent/CLIをインストール

Linux上で以下のコマンドを実行する。これにより、`${HOME}/.odrive-agent/bin`にodriveのAgent/CLIがインストールされる。

```
od="$HOME/.odrive-agent/bin" && \
curl -L "https://dl.odrive.com/odrive-py" --create-dirs -o "$od/odrive.py" && \
curl -L "https://dl.odrive.com/odriveagent-lnx-64" | tar -xvzf- -C "$od/" && \
curl -L "https://dl.odrive.com/odrivecli-lnx-64" | tar -xvzf- -C "$od/"
```

### odrive Agentを起動

以下のコマンドを実行し、odrive Agentを起動する。以下、odrive CLI (`$HOME/.odrive-agent/bin/odrive`) を実行する場合は、事前にodrive Agentを起動しておく。

```
nohup "$HOME/.odrive-agent/bin/odriveagent" > /dev/null 2>&1 &
```

### odrive Agent/CLIにアクセス権限付与（初回のみ）

以下のコマンドを実行する。これにより、odrive Agent/CLIによるクラウドストレージへのアクセスが可能となる。

```
"$HOME/.odrive-agent/bin/odrive" authenticate [上記で作成したAuth Key]
```

### odriveのMount

以下のコマンドを実行する。これにより、`$HOME/mnt/odrive`にodriveがマウントされる。但し、この段階ではまだodrive下のAmazon Driveフォルダはplaceholderファイル（`$HOME/mnt/odrive/Amazon Drive.cloudf`）になっており、直接アクセスできない。
```
mkdir -p "$HOME/mnt/odrive"
"$HOME/.odrive-agent/bin/odrive" mount "$HOME/mnt/odrive" /
```

### odrive下のAmazon DriveをSync（同期）

以下のコマンドを実行する。これにより、placeholderファイル（`$HOME/mnt/odrive/Amazon Drive.cloudf`）がAmazon Driveフォルダ（`$HOME/mnt/odrive/Amazon Drive`）に同期される（置き換わる）。
```
"$HOME/.odrive-agent/bin/odrive" sync "$HOME/mnt/odrive/Amazon Drive.cloudf" --recursive --nodownload
```

但し、Amazon Driveフォルダ（`$HOME/mnt/odrive/Amazon Drive`）及びその配下のフォルダ・ファイルの同期が完了するには時間がかかる。そのため、以下のコマンドを実行し、同期を確認する。"Synced"と表示されたら同期完了である。
```
"$HOME/.odrive-agent/bin/odrive" syncstate "$HOME/mnt/odrive/Amazon Drive"
```

### 写真をAmazon Driveにアップロード

同期後、Linux上の写真をAmazon Driveにアップロードする。

例えば、以下のようなコマンドを実行する。これにより、`image/`配下の画像ファイル(JPEG, PNG, BMP)がAmazon Driveにアップロードされる。
```
rsync -avz --include '*/' --include '*.jpg' --include '*.JPG' --include '*.jpeg' --include '*.JPEG' --include '*.png' --include '*.PNG' --include '*.bmp' --include '*.BMP'　--exclude '*' image/ "$HOME/mnt/odrive/Amazon Drive/image/"
```
:::note warn
Amazonプライムに入会している場合、画像ファイル（JPG, PNG, BMP等）はAmazon Driveに容量無制限で保存できるが、動画等の他のファイルはAmazon Driveに5GBまでしか保存できない。そのため、容量不足が気になる場合は、上記コマンドのように画像ファイルのみをAmazon Driveにアップロードするとよい。
:::

アップロード後、以下のコマンドを実行し、同期を確認する。"Synced"と表示されたら同期完了である。
```
"$HOME/.odrive-agent/bin/odrive" syncstate "$HOME/mnt/odrive/Amazon Drive"
```

### odrive下のAmazon DriveをUnsync

以下のコマンドを実行する。
```
"$HOME/.odrive-agent/bin/odrive" unsync "$HOME/mnt/odrive/Amazon Drive"
```

### odriveのUnmount

以下のコマンドを実行する。
```
"$HOME/.odrive-agent/bin/odrive" unmount "$HOME/mnt/odrive"
```

### odrive Agentを停止

以下のコマンドを実行し、odrive Agentを停止する。
```
killall odriveagent
```

### その他

上記ではodriveのMount/Sync機能を使用したが、odriveのBackup機能（odrive backup, odrive backupnow）を使用する方法もある。但し、Bakcup機能の使用にはodriveのPREMIUM登録が必要である。

## 参考リンク

odriveの公式ガイド。
* Agent/CLI
  * https://docs.odrive.com/docs/odrive-sync-agent
* Free vs. Premium Capabilities
  * https://docs.odrive.com/docs/free-vs-premium-capabilities