Android の SD カードと PC のフォルダを同期させたい
写真や音楽、書類など、PC 内のフォルダと Android の SD のフォルダを同期させたいと思っていました。
しかし、標準で使える Android File Transfer は PC -> Android へのコピーであり、1つずつファイルの配置が変わったりすると、
- 一度 SD 内のフォルダを削除
- PC から SD へフォルダをコピー
ということをしなければなりませんでした。新しい写真を既存のフォルダへ入れるたびに、この作業をするのは苦痛です。
というわけで、1年前くらいから折をみて色々な方法を探していました。結論としては、google/adb-sync を利用します。
(Linux, Mac ユーザ向け)
同期させる色々な方法
SimpleSSHD を使って、ssh で PC -> android へコピー
rsync コマンドでは ssh を使って、ファイルを同期できます。
SimpleSSHD - Google Play のアプリ を Android へインストールし、PC から rsync コマンド経由でファイルを同期させます。
この方法でうまく行ったかに思えたのですが、コピー先のディレクトリによっては Permission Denied が発生し、フォルダを消せない という問題が発生しました(SimpleSSHD では root ユーザを利用しないため)。
これでは、新しい写真をコピーできても、配置換えしたときに消すことができません。
また、ssh サーバを Android のアプリケーションとして立てているためか、コピーが遅いのも難点でした(許容できる範囲ですが)。
RsyncWrapper を試す
次に、Rsync Wrapper - Google Play のアプリ といういかにもなアプリを試してみました。
こちらは remote と local を指定して、rsync を定期的に実行してくれるアプリです。
正しく設定できれば問題はなかったのかもしれませんが、僕の場合は rsync daemon を動作させているサーバに remote を設定し、Android の SD カードのフォルダを local に設定しました。しかし、
| |
というエラーが発生し、うまく同期ができませんでした。
adb-sync を使う
最後に、google/adb-sync というのを見つけ、試してみました。
こちらは Android 開発者ツールである adb を利用したファイル同期の方法です。
そのためセットアップはやや面倒くさいのですが、PC と Android で開発者オプションを有効にします。
1. PC では Android Studio をインストール
Android Studio のインストール | Android Developers
そして、インストールが完了すると、adb が /Users/you/Library/Android/sdk/platform-tools というようなパスにインストールされるため、パスを通して、adb shell コマンドが実行できるようにしてください(重要)
2. Android では、開発者向けオプションを有効化
なんでこんなにわかりにくくしているのか不明ですが、Androidスマホ/タブレットで「開発者向けオプション」をオンにする:Tech TIPS - @IT のように、ビルド番号を 7 回タップして開発者向けオプションを有効にし、adb を有効化します。
3. adb shell がつながったら、google/adb-sync を git clone
あとは、adb-sync を clone し、コマンドを実行するだけです。
僕の Android は SD カードを /storage/9C33-6BBD/ にマウントしているので、このフォルダと同期させます。
--delete オプションでローカルと完全に一致するようファイルを同期します。
| |
内部的に adb ‐ 通信用語の基礎知識 のプロトコルを使っていて、結構コピーは速いです。
Mac の場合は、実行時に。
| |
というエラーが発生するかもしれません。その場合は、Does not work on MAC · Issue #7 · google/adb-sync で解決できます。
あと、adb-sync は exclude オプションがないため、.DS_Store が同期されてしまいます。
あらかじめ、Macの.DS_Storeを一括削除する - Qiita をしておくと同期がはかどります。
ということで、この結論に至るまで、合間に調べ続けてだいたい 1年くらいかかりました。
あれ、適当な有料アプリを買ったらよかったんじゃあ(白目)。