Android の SD カードと PC のフォルダを同期させたい
写真でも音楽でも書類でも、PC の中のフォルダと Android の SD のフォルダを同期させたいと思っていました。
しかし、標準で使える Android File Transfer は PC -> Android へのコピーであって、一つずつファイルの配置が変わったりすると、
- 一度 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 に設定したのですが、
server sent "SSH-2.0-OpenSSH_7.4" rather than greeting
というエラーが発生し、うまく同期ができませんでした。
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-sync --delete ~/Photos /storage/9C33-6BBD/photos
内部的に adb ‐ 通信用語の基礎知識 のプロトコルを使っていて、結構コピーは速いです。
Mac 場合は、実行時に
unknown locale: UTF-8
というエラーが発生するかもしれません。その場合は、Does not work on MAC · Issue #7 · google/adb-sync で解決できます。
あと、adb-sync は exclude オプションがないため、.DS_Store が同期されてしまいます。
あらかじめ、Macの.DS_Storeを一括削除する - Qiita をしておくと同期がはかどります。
ということで、この結論に至るまで、合間合間で調べていて、だいたい 1年くらい。
あれ、適当な有料アプリ買ったらよかったんじゃあ(白目