ガイド

AndroidスマホとMacでrsyncを使う

rsyncには、両端にフォルダが必要です。スマホをボリュームとしてマウントすればそれがフォルダになり、rsyncはほかのドライブと同じように動きます。Androidのストレージに合わせて変えるのは、2か所だけです。

Android File TransferやOpenMTPのように、アプリ専用のウインドウの中にスマホを表示する方法では、rsyncはスマホに届きません。rsyncには両側にパスが必要だからです。代わりにスマホをボリュームとしてマウントすれば、カメラロールをMacにコピーするのはコマンド1つです。

rsync -av --progress "$PHONE/DCIM/Camera/" ~/Pictures/Phone/

スマホからMacへは、このままで動きます。スマホへ向けては、-aの代わりに-rtを使います。スマホのストレージはMacのアクセス権を保持できず、シンボリックリンクも作れないからです。新しいことはまず-nで試し、--deleteは慎重に扱います。マウントしなくても、adb自身のpullとpush、そしてbetter-adb-syncというツールで、同じ仕事の一部はできます。

スマホのパスを見つける

SideMountは、USBケーブル越しにスマホをボリュームとしてマウントし、Finderはそれをドライブと同じように表示します(セットアップは数分で済みます)。場所は/Volumesではありません。~/Library/Application Support/SideMount/Volumes/の中にある、スマホの名前のフォルダです。スマホの内部ストレージがボリュームの最上階層で、SDカードはその中のSD Cardという名前のフォルダです。

このパスを入力する必要はありません。ターミナルで、スペースを入れずにPHONE=と入力し、Finderからスマホのボリュームをウインドウにドラッグして、Returnキーを押します。パスはターミナルが書き込んでくれて、スペースの前にはバックスラッシュが付きます。以降、そのウインドウでは、どのコマンドでも"$PHONE"がスマホを指します。ダブルクォートは外さないでください。パスにスペースが含まれているからです。

スマホから写真をコピーする

rsync -av --progress "$PHONE/DCIM/Camera/" ~/Pictures/Phone/

翌週に同じコマンドを実行すると、rsyncは新しい写真だけをコピーします。両側でファイルのサイズと変更日時を比べ、一致するものは飛ばすからです。スクリーンショットはたいていPictures/ScreenshotsかDCIM/Screenshotsにあり、パスを変えれば同じコマンドで扱えます。

小さなファイルが何千もあるフォルダは、サイズから想像するより時間がかかります。どのツールでコピーしても、ケーブル上ではファイル1つごとに決まった手間がかかるので、数百枚の写真ならすぐ終わりますが、メッセージアプリのメディアフォルダはそうはいきません。

まず-nで試す

rsync -avn "$PHONE/DCIM/Camera/" ~/Pictures/Phone/

-n(--dry-run)は、rsyncがコピーするものをすべて一覧にし、何もコピーしません。パスを変えたときやフラグを加えたとき、そして--deleteの前には毎回使ってください。

--deleteでミラーリングする

--deleteは、コピー先をコピー元とまったく同じにします。コピー先にあってコピー元にないファイルは削除されます。Macで管理している音楽フォルダにスマホを合わせたいときに向いていて、MacからAndroidに音楽をコピーするで紹介している使い方です。まずドライラン、それから本番です。

rsync -rtn --delete --exclude '.DS_Store' ~/Music/Phone/ "$PHONE/Music/"
rsync -rt --delete --progress --exclude '.DS_Store' ~/Music/Phone/ "$PHONE/Music/"

2行目を実行する前に、ドライランの結果を読んでください。パスの間違いや、コピー元の後ろのスラッシュの付け忘れがあると、--deleteが意図しないフォルダに向かうことがあり、削除は取り消せません。どちら側でもゴミ箱には入りません。また、スマホから取ったバックアップには決して使わないでください。スマホで削除した写真が次の実行でバックアップからも消えてしまい、バックアップの意味がなくなります。

--exclude '.DS_Store'を付けているのは、FinderがMacのフォルダにこのファイルを残すからです。スマホには必要ありません。

サムネイルを除外する

rsync -av --progress --exclude '.thumbnails' "$PHONE/DCIM/" ~/Pictures/Phone-DCIM/

古いスマホのギャラリーアプリは、DCIM/.thumbnailsにサムネイルをキャッシュしています。これは大きくなることがあり、必要になればスマホが作り直します。スラッシュを含まないパターンはどの階層にも一致するので、--exclude '.thumbnails'はどこにあってもこのフォルダを飛ばします。--exclude '.*'はさらに進んで、隠しファイルと隠しフォルダをすべて飛ばします。

スマホへ向けて-aを使わないほうがいい理由

-aは-rlptgoDの省略形です。Macのディスクなら、どれも意味があります。スマホの共有ストレージでは、いくつかは意味がありません。

残りで大事なのは-rと-tです。そこで、スマホへは-rtを使うか、-aに--no-perms --no-owner --no-groupを加えます。どちらにしても-tは残してください。スマホは変更日時を保持するので、日時を保たないとすべてのファイルが変更されたように見え、毎回すべてをコピーし直すことになります。

日時の癖がもう1つ、SDカードに残っています。FAT32でフォーマットしたカードは日時を2秒単位でしか保存しないので、ファイルが1秒ずれて見え、毎回コピーし直されることがあります。--modify-window=1を加えると、rsyncは1秒違いの日時を同じとみなします。

-c(--checksum)も外しておきましょう。比べるために両側ですべてのファイルを最後まで読むので、スマホの場合はすべてのファイルをケーブル越しに引き出すことになります。サイズと日時で十分です。

Macに入っているrsync

最近のMacでrsync --versionを実行すると、こう答えます。

openrsync: protocol version 29
rsync version 2.6.9 compatible

macOS 15.4から、Appleは長年入れていたGPLのrsync 2.6.9の代わりに、BSD系のライセンスで書き直されたopenrsyncを搭載しています。rsyncのオプションの一部に対応していて、このページのコマンドはすべて動きます。実行全体の進み具合を1行で表示する--info=progress2など、rsync 3の追加機能が欲しいなら、Homebrewでインストールします(brew install rsync)。そのあとは、たいていHomebrewのものがターミナルで優先されます。

マウントせずに:adb自身のツール

ツール変更分だけコピードライラン削除を含むミラーリング除外パターン
SideMountでマウントしたスマホとrsync可能(サイズと日時で)可能(-n)可能(--delete)可能(--exclude)
adb pull -a不可(すべてコピー)不可不可不可
adb push --syncスマホへの方向のみ(タイムスタンプで)独自の-nでもデータは送られる不可不可
better-adb-sync可能可能(-n)可能(--del)可能(--exclude)
マウントしたスマホで使うrsyncと、マウントせずにコピーするadbのツール。

どれもスマホのUSB デバッグが必要です。オンにするのは1分で済みます。adbのツールには、MacにGoogleのPlatform-Toolsも必要です。

スマホのadb接続を使えるのは、一度に1つのプログラムだけです。SideMountがスマホを使っているなら、先に取り出してください。取り出すと、SideMountはスマホを手放します。取り出す前からadbサーバーが動いていた場合は、adb kill-serverを一度実行して、スマホを探し直させてください。

よくある質問

rsyncで、マウントせずにAndroidスマホからファイルをコピーできますか?

いいえ。rsyncには両側にパスが必要で、OpenMTPのようなMTPアプリは、スマホを専用のウインドウの中にしか表示しません。スマホをボリュームとしてマウントしてパスを持たせるか、adb pullやbetter-adb-syncのような、スマホと直接やり取りするadbベースのツールを使ってください。

Androidスマホへのコピーでrsync -aがうまく動かないのはなぜですか?

-aはアクセス権、所有者、グループ、シンボリックリンクのコピーを求めますが、スマホの共有ストレージはそのどれも保持しません。スマホへは-rtか、-a --no-perms --no-owner --no-groupを使ってください。どのファイルが変わったかをrsyncが判断できるよう、-tは残します。

macOSに付属しているrsyncはどれですか?

macOS 15.4からはopenrsyncで、「openrsync: protocol version 29」と「rsync version 2.6.9 compatible」と表示されます。-rt、-n、--progress、--delete、--excludeに対応しています。完全なrsync 3が必要なら、brew install rsyncでインストールしてください。

スマホでrsync --deleteを使っても安全ですか?

ドライランのあとでなら安全です。まず同じコマンドを-n付きで実行して、一覧を読んでください。削除されたファイルは元に戻らないからです。Macのフォルダにスマホを合わせるために使い、スマホから取ったバックアップには決して使わないでください。スマホから消した写真が、バックアップからも消えてしまいます。

rsyncが毎回すべてのファイルをコピーし直すのはなぜですか?

たいていは-tがないためです。コピーには作成した時点の日時が付くので、オリジナルと一致しません。FAT32のSDカードでは日時が2秒単位でしか保存されないので、--modify-window=1を加えて、1秒違いの日時を同じとみなすようにします。

AndroidスマホがFinderに。

7日間無料、カード登録不要。macOS 26以降。

macOS版をダウンロード