Guide

Utiliser rsync avec un téléphone Android et un Mac

rsync a besoin d’un dossier à chaque bout. Une fois monté comme volume, le téléphone en est un, et rsync s’y utilise comme sur n’importe quel disque, avec deux petits ajustements pour le stockage d’Android.

rsync ne peut pas atteindre un téléphone qui vit dans la fenêtre d’une app, comme le montrent Android File Transfer et OpenMTP, car il lui faut un chemin de chaque côté. Montez plutôt le téléphone comme un volume, et copier la pellicule sur le Mac tient en une commande :

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

Du téléphone vers le Mac, elle fonctionne telle quelle. Vers le téléphone, utilisez -rt au lieu de -a, car le stockage du téléphone ne peut pas garder les permissions du Mac, et on ne peut pas y créer de liens symboliques. Essayez toute nouveauté d’abord avec -n, et maniez --delete avec prudence. Sans montage, les commandes pull et push d’adb, et un outil appelé better-adb-sync, font une partie du même travail.

Trouver le chemin du téléphone

SideMount monte le téléphone par le câble USB comme un volume que le Finder affiche comme un disque (la configuration prend quelques minutes). Il ne se trouve pas dans /Volumes : c’est un dossier au nom du téléphone dans ~/Library/Application Support/SideMount/Volumes/. Le stockage interne du téléphone est la racine du volume, et une carte SD est un dossier nommé SD Card à l’intérieur.

Inutile de taper ce chemin. Dans le Terminal, tapez PHONE= sans espace, faites glisser le volume du téléphone depuis le Finder dans la fenêtre, et appuyez sur Retour. Le Terminal écrit le chemin pour vous, avec une barre oblique inverse devant chaque espace. À partir de là, "$PHONE" désigne le téléphone dans toutes les commandes de cette fenêtre. Gardez les guillemets doubles : le chemin contient un espace.

Copier les photos du téléphone

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

Lancez la même commande la semaine suivante et rsync ne copie que les nouvelles photos : il compare la taille et la date de modification de chaque fichier des deux côtés et ignore ceux qui correspondent. Les captures d’écran sont en général dans Pictures/Screenshots ou DCIM/Screenshots, et se copient avec la même commande et ce chemin.

Un dossier de milliers de petits fichiers prend plus de temps que sa taille ne le laisse penser. Chaque fichier a un coût fixe sur le câble, quel que soit l’outil qui le copie, donc quelques centaines de photos passent vite, et le dossier de médias d’une messagerie, non.

Essayer d’abord avec -n

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

-n, ou --dry-run, liste tout ce que rsync copierait et ne copie rien. C’est une simulation. Faites-en une chaque fois que vous changez un chemin ou ajoutez une option, et à chaque fois avant --delete.

Faire un miroir avec --delete

--delete fait de la destination une copie exacte de la source : tout fichier présent dans la destination mais absent de la source est supprimé. Cela convient à un dossier de musique que vous gardez sur le Mac et auquel le téléphone doit correspondre, comme dans copier sa musique d’un Mac vers Android. La simulation d’abord, puis la vraie commande :

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

Lisez la simulation avant de lancer la deuxième ligne. Un chemin erroné, ou une barre oblique oubliée après la source, peut diriger --delete vers un dossier que vous ne visiez pas, et la suppression est définitive : rien ne passe par une corbeille, d’un côté comme de l’autre. Ne l’utilisez jamais non plus sur une sauvegarde faite depuis le téléphone. Une photo supprimée du téléphone disparaîtrait alors de la sauvegarde au passage suivant, ce qui ruine l’intérêt de la sauvegarde.

Le --exclude '.DS_Store' est là parce que le Finder laisse ces fichiers dans les dossiers du Mac, et qu’ils ne servent à rien sur un téléphone.

Laisser de côté les miniatures

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

Sur les téléphones plus anciens, les apps de galerie mettent les miniatures en cache dans DCIM/.thumbnails, qui peut devenir volumineux et que le téléphone reconstruit au besoin. Un motif sans barre oblique correspond à n’importe quelle profondeur, donc --exclude '.thumbnails' ignore ce dossier où qu’il soit. --exclude '.*' va plus loin et ignore tous les fichiers et dossiers cachés.

Pourquoi -a est une mauvaise habitude vers le téléphone

-a est le raccourci de -rlptgoD. Sur un disque du Mac, tout cela a un sens. Sur le stockage partagé d’un téléphone, plusieurs de ces options n’en ont pas :

Ce qui compte dans le reste, c’est -r et -t. Vers le téléphone, utilisez donc -rt, ou gardez -a et ajoutez --no-perms --no-owner --no-group. Gardez -t dans tous les cas. Le téléphone conserve les dates de modification, et sans elles chaque fichier semble modifié, donc chaque passage recopie tout.

Reste une bizarrerie de dates, sur les cartes SD. Une carte formatée en FAT32 ne stocke les dates qu’à deux secondes près, donc un fichier peut sembler décalé d’une seconde et être recopié à chaque passage. Ajoutez --modify-window=1, qui dit à rsync de traiter comme identiques deux dates séparées d’une seconde.

Laissez aussi de côté -c (--checksum). Il lit chaque fichier en entier des deux côtés pour les comparer, ce qui, sur le téléphone, revient à faire passer chaque fichier par le câble. La taille et la date suffisent.

Le rsync de votre Mac

Lancez rsync --version sur un Mac récent et il répond :

openrsync: protocol version 29
rsync version 2.6.9 compatible

Depuis macOS 15.4, Apple fournit openrsync, une réécriture sous licence de type BSD, à la place du rsync 2.6.9 sous GPL qu’il gardait depuis des années. Il accepte une partie des options de rsync, et toutes les commandes de cette page fonctionnent avec lui. Pour les extras de rsync 3, comme --info=progress2 pour une seule ligne de progression sur toute la copie, installez-le avec Homebrew (brew install rsync) ; la copie de Homebrew passe en général en premier dans le Terminal ensuite.

Sans montage : les outils d’adb

OutilNe copie que ce qui a changéSimulationMiroir avec suppressionsMotifs d’exclusion
rsync, téléphone monté avec SideMountOui, par taille et dateOui, -nOui, --deleteOui, --exclude
adb pull -aNon, copie toutNonNonNon
adb push --syncVers le téléphone, par horodatageSon -n envoie quand même les donnéesNonNon
better-adb-syncOuiOui, -nOui, --delOui, --exclude
rsync sur un téléphone monté, et les outils adb qui copient sans le monter.

Tous demandent le débogage USB sur le téléphone ; l’activer prend une minute. Les outils adb demandent aussi les outils de plateforme Android de Google sur le Mac.

Un seul programme à la fois peut tenir la connexion adb d’un téléphone. Si SideMount tient le téléphone, éjectez-le d’abord, ce qui libère le téléphone. Si votre serveur adb tournait déjà avant l’éjection, lancez une fois adb kill-server pour qu’il cherche à nouveau le téléphone.

Questions

rsync peut-il copier des fichiers d’un téléphone Android sans le monter ?

Non. rsync a besoin d’un chemin de chaque côté, et une app MTP comme OpenMTP n’affiche le téléphone que dans sa propre fenêtre. Montez le téléphone comme un volume pour qu’il ait un chemin, ou utilisez un outil basé sur adb comme adb pull ou better-adb-sync, qui parlent directement au téléphone.

Pourquoi rsync -a se comporte-t-il mal vers un téléphone Android ?

-a demande de copier les permissions, les propriétaires, les groupes et les liens symboliques, et le stockage partagé d’un téléphone ne garde rien de tout cela. Utilisez -rt vers le téléphone, ou -a --no-perms --no-owner --no-group. Gardez -t, pour que rsync sache quels fichiers ont changé.

Quel rsync est fourni avec macOS ?

Depuis macOS 15.4, c’est openrsync, qui répond « openrsync : protocol version 29 » et « rsync version 2.6.9 compatible ». Il gère -rt, -n, --progress, --delete et --exclude. Pour le rsync 3 complet, installez-le avec brew install rsync.

rsync --delete est-il sans risque avec un téléphone ?

Seulement après une simulation. Lancez d’abord la même commande avec -n et lisez la liste, car les fichiers qu’il supprime sont perdus pour de bon. Utilisez-le pour aligner le téléphone sur un dossier du Mac, jamais sur une sauvegarde faite depuis le téléphone, où il supprimerait les photos que vous avez retirées du téléphone.

Pourquoi rsync recopie-t-il tous les fichiers à chaque passage ?

En général parce que -t manque, donc les copies portent la date de leur création et ne correspondent jamais aux originaux. Sur une carte SD en FAT32, les dates ne sont stockées qu’à deux secondes près ; ajoutez --modify-window=1 pour que rsync considère comme égales deux dates séparées d’une seconde.

Votre téléphone Android, dans le Finder.

Gratuit pendant sept jours, sans carte bancaire. macOS 26 ou ultérieur.

Télécharger pour macOS