Guida

Usare rsync con un telefono Android e un Mac

rsync ha bisogno di una cartella a ciascun capo. Una volta montato come volume, il telefono lo diventa, e rsync funziona come su qualsiasi disco, con due piccole modifiche per la memoria di Android.

rsync non può raggiungere un telefono che vive dentro la finestra di un'app, come lo mostrano Android File Transfer e OpenMTP, perché ha bisogno di un percorso su entrambi i lati. Monta invece il telefono come volume, e copiare il rullino sul Mac diventa un solo comando:

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

Dal telefono al Mac funziona così com'è. Verso il telefono, usa -rt al posto di -a, perché la memoria del telefono non può conservare i permessi del Mac, e non ci si possono creare link simbolici. Prova ogni cosa nuova prima con -n, e maneggia --delete con cautela. Senza montare il telefono, i comandi pull e push di adb, e uno strumento chiamato better-adb-sync, fanno una parte dello stesso lavoro.

Trovare il percorso del telefono

SideMount monta il telefono attraverso il cavo USB come un volume che il Finder mostra come un disco (configurarlo richiede pochi minuti). Non si trova in /Volumes: è una cartella con il nome del telefono dentro ~/Library/Application Support/SideMount/Volumes/. La memoria interna del telefono è il primo livello del volume, e una scheda SD è una cartella chiamata SD Card al suo interno.

Non serve digitare quel percorso. Nel Terminale, scrivi PHONE= senza spazi, trascina il volume del telefono dal Finder nella finestra e premi A capo. Il Terminale scrive il percorso per te, con una barra rovesciata prima di ogni spazio. Da lì in poi, "$PHONE" indica il telefono in ogni comando di quella finestra. Tieni le virgolette doppie: il percorso contiene uno spazio.

Copiare le foto dal telefono

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

Esegui lo stesso comando la settimana dopo e rsync copia solo le foto nuove: confronta dimensione e data di modifica di ogni file sui due lati e salta quelli che coincidono. Gli screenshot di solito sono in Pictures/Screenshots o DCIM/Screenshots, e basta lo stesso comando con quel percorso.

Una cartella di migliaia di file piccoli richiede più tempo di quanto la sua dimensione lasci pensare. Ogni file ha un costo fisso sul cavo, qualunque strumento lo copi, quindi qualche centinaio di foto passa in fretta e la cartella dei media di un'app di messaggistica no.

Provare prima con -n

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

-n, o --dry-run, è una simulazione: elenca tutto ciò che rsync copierebbe e non copia nulla. Usalo ogni volta che cambi un percorso o aggiungi un'opzione, e sempre prima di --delete.

Creare una copia speculare con --delete

--delete rende la destinazione una copia esatta dell'origine: ogni file nella destinazione che non è nell'origine viene eliminato. È adatto a una cartella di musica che tieni sul Mac e che vuoi rispecchiata sul telefono, come in copiare musica da un Mac ad Android. Prima la simulazione, poi il comando vero:

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

Leggi la simulazione prima di eseguire la seconda riga. Un percorso sbagliato, o una barra mancante dopo l'origine, può puntare --delete su una cartella che non intendevi, e l'eliminazione è definitiva: non finisce nulla nel Cestino, da nessuna delle due parti. E non usarlo mai su un backup fatto dal telefono. Una foto che elimini sul telefono sparirebbe dal backup all'esecuzione successiva, e il backup non servirebbe più a nulla.

L'opzione --exclude '.DS_Store' c'è perché il Finder lascia quei file nelle cartelle del Mac, e a un telefono non servono.

Escludere le miniature

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

Le app galleria dei telefoni più vecchi memorizzano le miniature in DCIM/.thumbnails, una cartella che può diventare grande e che il telefono ricrea quando serve. Uno schema senza barra vale a qualsiasi profondità, quindi --exclude '.thumbnails' salta quella cartella ovunque si trovi. --exclude '.*' va oltre e salta tutti i file e le cartelle nascosti.

Perché -a è un'abitudine sbagliata verso il telefono

-a è l'abbreviazione di -rlptgoD. Su un disco del Mac hanno tutte senso. Sulla memoria condivisa di un telefono, diverse no:

Del resto, quello che conta sono -r e -t. Quindi verso il telefono usa -rt, oppure tieni -a e aggiungi --no-perms --no-owner --no-group. In ogni caso tieni -t. Il telefono conserva le date di modifica, e senza di esse ogni file sembra cambiato, quindi ogni esecuzione ricopia tutto.

Resta una stranezza con le date, sulle schede SD. Una scheda formattata in FAT32 memorizza le date con una precisione di soli due secondi, quindi un file può risultare spostato di un secondo ed essere ricopiato a ogni esecuzione. Aggiungi --modify-window=1, che dice a rsync di considerare uguali le date che differiscono di un secondo.

Lascia fuori anche -c (--checksum). Legge per intero ogni file su entrambi i lati per confrontarli, il che sul telefono significa far passare ogni file attraverso il cavo. Dimensione e data bastano.

La versione di rsync del tuo Mac

Esegui rsync --version su un Mac recente e la risposta è:

openrsync: protocol version 29
rsync version 2.6.9 compatible

Da macOS 15.4, Apple include openrsync, una riscrittura con licenza di tipo BSD, al posto di rsync 2.6.9 con licenza GPL che aveva tenuto per anni. Accetta una parte delle opzioni di rsync, e ogni comando di questa pagina funziona con openrsync. Per gli extra di rsync 3, come --info=progress2 per una sola riga di avanzamento per l'intera esecuzione, installalo con Homebrew (brew install rsync); da quel momento, nel Terminale di solito viene usata per prima la copia di Homebrew.

Senza montare: gli strumenti di adb

StrumentoCopia solo ciò che è cambiatoSimulazioneCopia speculare con eliminazioniSchemi di esclusione
rsync, telefono montato con SideMountSì, per dimensione e dataSì, -nSì, --deleteSì, --exclude
adb pull -aNo, copia tuttoNoNoNo
adb push --syncVerso il telefono, per dataIl suo -n invia comunque i datiNoNo
better-adb-syncSìSì, -nSì, --delSì, --exclude
rsync su un telefono montato, e gli strumenti adb che copiano senza montarlo.

Tutti richiedono il debug USB sul telefono; attivarlo richiede un minuto. Gli strumenti adb richiedono anche i platform-tools di Google per Android sul Mac.

Un solo programma alla volta può tenere la connessione adb di un telefono. Se il telefono è in uso da SideMount, prima espellilo: così SideMount lo rilascia. Se il tuo server adb era già in esecuzione prima dell'espulsione, esegui una volta adb kill-server perché cerchi di nuovo il telefono.

Domande

rsync può copiare file da un telefono Android senza montarlo?

No. rsync ha bisogno di un percorso su entrambi i lati, e un'app MTP come OpenMTP mostra il telefono solo dentro la propria finestra. Monta il telefono come volume, così ha un percorso, oppure usa uno strumento basato su adb come adb pull o better-adb-sync, che parlano direttamente con il telefono.

Perché rsync -a si comporta male quando copio su un telefono Android?

-a chiede di copiare permessi, proprietari, gruppi e link simbolici, e la memoria condivisa di un telefono non conserva nessuna di queste cose. Usa -rt verso il telefono, oppure -a --no-perms --no-owner --no-group. Tieni -t, così rsync capisce quali file sono cambiati.

Quale rsync è incluso in macOS?

Da macOS 15.4 è openrsync, che risponde «openrsync: protocol version 29» e «rsync version 2.6.9 compatible». Gestisce -rt, -n, --progress, --delete e --exclude. Per avere rsync 3 completo, installalo con brew install rsync.

rsync --delete è sicuro da usare con un telefono?

Solo dopo una simulazione. Esegui prima lo stesso comando con -n e leggi l'elenco, perché i file che elimina spariscono per sempre. Usalo per allineare il telefono a una cartella del Mac, mai su un backup fatto dal telefono, dove eliminerebbe le foto che hai tolto dal telefono.

Perché rsync ricopia tutti i file a ogni esecuzione?

Di solito perché manca -t, quindi le copie portano la data in cui sono state create e non coincidono mai con gli originali. Su una scheda SD FAT32 le date sono memorizzate con una precisione di soli due secondi; aggiungi --modify-window=1 perché rsync consideri uguali le date che differiscono di un secondo.

Il tuo telefono Android, nel Finder.

Gratis per sette giorni, senza carta di credito. macOS 26 o successivo.

Scarica per macOS