Guía

Cómo usar rsync con un teléfono Android y un Mac

rsync necesita una carpeta en cada extremo. Con el teléfono montado como volumen, lo es, y rsync funciona como en cualquier unidad, con dos pequeños cambios por cómo es el almacenamiento de Android.

rsync no puede llegar a un teléfono que vive dentro de la ventana de una app, como lo muestran Android File Transfer y OpenMTP, porque necesita una ruta en cada lado. Monta el teléfono como un volumen y copiar las fotos de la cámara al Mac es un solo comando:

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

Del teléfono al Mac, eso funciona tal cual. Hacia el teléfono, usa -rt en lugar de -a, porque el almacenamiento del teléfono no puede guardar los permisos del Mac y en él no se pueden crear enlaces simbólicos. Prueba cualquier cosa nueva primero con -n, y usa --delete con cuidado. Sin montar el teléfono, los propios pull y push de adb, y una herramienta llamada better-adb-sync, hacen parte del mismo trabajo.

Encontrar la ruta del teléfono

SideMount monta el teléfono por el cable USB como un volumen que el Finder muestra como una unidad (configurarla lleva unos minutos). No vive en /Volumes: es una carpeta con el nombre del teléfono dentro de ~/Library/Application Support/SideMount/Volumes/. El almacenamiento interno del teléfono es la raíz del volumen, y una tarjeta SD es una carpeta llamada SD Card dentro de él.

No hace falta que escribas esa ruta. En el Terminal, escribe PHONE= sin espacios, arrastra el volumen del teléfono desde el Finder a la ventana y pulsa Retorno. El Terminal escribe la ruta por ti, con una barra invertida antes de cada espacio. A partir de ahí, "$PHONE" representa el teléfono en todos los comandos de esa ventana. Deja las comillas dobles: la ruta tiene un espacio.

Copiar las fotos del teléfono

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

Ejecuta el mismo comando la semana que viene y rsync solo copiará las fotos nuevas: compara el tamaño y la fecha de modificación de cada archivo en los dos lados y se salta los que coinciden. Las capturas de pantalla suelen estar en Pictures/Screenshots o DCIM/Screenshots, y se copian con el mismo comando y esa ruta.

Una carpeta con miles de archivos pequeños tarda más de lo que sugiere su tamaño. Cada archivo tiene un coste fijo en el cable, sea cual sea la herramienta que lo copie, así que unos cientos de fotos van rápido y la carpeta multimedia de una app de mensajería no.

Probarlo antes con -n

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

-n, o --dry-run, enumera todo lo que rsync copiaría y no copia nada. Úsalo siempre que cambies una ruta o añadas una opción, y cada vez antes de --delete.

Reflejar con --delete

--delete convierte el destino en una copia exacta del origen: se borra cualquier archivo del destino que no esté en el origen. Eso encaja con una carpeta de música que guardas en el Mac y quieres que el teléfono refleje, como en copiar música de un Mac a Android. Primero la simulación, y después lo de verdad:

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

Lee la simulación antes de ejecutar la segunda línea. Una ruta equivocada, o una barra que falta después del origen, puede apuntar --delete a una carpeta que no querías, y borra para siempre: nada va a ninguna papelera, en ninguno de los dos lados. Tampoco lo uses nunca con una copia de seguridad hecha desde el teléfono. Una foto que borres en el teléfono desaparecería entonces de la copia en la siguiente ejecución, y la copia dejaría de tener sentido.

El --exclude '.DS_Store' está ahí porque el Finder deja esos archivos en las carpetas del Mac, y al teléfono no le sirven de nada.

Dejar fuera las miniaturas

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

Las apps de galería de los teléfonos más antiguos guardan miniaturas en caché en DCIM/.thumbnails, que puede crecer mucho y que el teléfono vuelve a generar cuando le hace falta. Un patrón sin barra coincide a cualquier profundidad, así que --exclude '.thumbnails' se salta esa carpeta esté donde esté. --exclude '.*' va más allá y se salta todos los archivos y carpetas ocultos.

Por qué -a es una mala costumbre hacia el teléfono

-a es la forma corta de -rlptgoD. En un disco del Mac todas tienen sentido. En el almacenamiento compartido de un teléfono, varias no:

Del resto, lo que importa es -r y -t. Así que hacia el teléfono usa -rt, o quédate con -a y añade --no-perms --no-owner --no-group. Elijas lo que elijas, conserva -t. El teléfono guarda las fechas de modificación, y sin ellas todos los archivos parecen cambiados, así que cada ejecución vuelve a copiarlo todo.

Queda una rareza con las fechas, en las tarjetas SD. Una tarjeta formateada en FAT32 guarda las horas con una precisión de dos segundos, así que un archivo puede parecer desfasado un segundo y copiarse otra vez en cada ejecución. Añade --modify-window=1, que le dice a rsync que trate como iguales las horas que se diferencian en un segundo.

Deja fuera también -c (--checksum). Lee cada archivo entero en los dos lados para compararlos, lo que en el teléfono significa pasar cada archivo por el cable. El tamaño y la fecha bastan.

El rsync que trae tu Mac

Ejecuta rsync --version en un Mac reciente y responde:

openrsync: protocol version 29
rsync version 2.6.9 compatible

Desde macOS 15.4, Apple incluye openrsync, una reescritura con una licencia de estilo BSD, en lugar del rsync 2.6.9 con licencia GPL que había mantenido durante años. Acepta un subconjunto de las opciones de rsync, y todos los comandos de esta página funcionan con él. Para los extras de rsync 3, como --info=progress2, que da una sola línea de progreso para toda la ejecución, instálalo con Homebrew (brew install rsync); a partir de ahí, la copia de Homebrew suele ser la que el Terminal encuentra primero.

Sin montar: las herramientas del propio adb

HerramientaCopia solo lo que cambióSimulaciónReflejo con borradosPatrones de exclusión
rsync, con el teléfono montado con SideMountSí, por tamaño y fechaSí, -nSí, --deleteSí, --exclude
adb pull -aNo, lo copia todoNoNoNo
adb push --syncHacia el teléfono, por fechaSu -n envía igualmente los datosNoNo
better-adb-syncSíSí, -nSí, --delSí, --exclude
rsync en un teléfono montado, y las herramientas de adb que copian sin montarlo.

Todas necesitan la depuración por USB en el teléfono; activarla lleva un minuto. Las herramientas de adb necesitan además en el Mac las platform-tools de Android de Google.

Solo un programa a la vez puede tener la conexión adb de un teléfono. Si SideMount tiene el teléfono, expúlsalo primero, y así lo suelta. Si tu servidor adb ya estaba en marcha antes de expulsarlo, ejecuta adb kill-server una vez para que vuelva a buscar el teléfono.

Preguntas

¿rsync puede copiar archivos de un teléfono Android sin montarlo?

No. rsync necesita una ruta en cada lado, y una app MTP como OpenMTP solo muestra el teléfono dentro de su propia ventana. Monta el teléfono como un volumen para que tenga una ruta, o usa una herramienta basada en adb como adb pull o better-adb-sync, que hablan directamente con el teléfono.

¿Por qué rsync -a da problemas al copiar a un teléfono Android?

-a pide copiar permisos, propietarios, grupos y enlaces simbólicos, y el almacenamiento compartido de un teléfono no guarda nada de eso. Usa -rt hacia el teléfono, o -a --no-perms --no-owner --no-group. Conserva -t, para que rsync sepa qué archivos han cambiado.

¿Qué rsync trae macOS?

Desde macOS 15.4 es openrsync, que responde «openrsync: protocol version 29» y «rsync version 2.6.9 compatible». Admite -rt, -n, --progress, --delete y --exclude. Para tener el rsync 3 completo, instálalo con brew install rsync.

¿Es seguro usar rsync --delete con un teléfono?

Solo después de una simulación. Ejecuta antes el mismo comando con -n y lee la lista, porque los archivos que borra desaparecen para siempre. Úsalo para que el teléfono refleje una carpeta del Mac, nunca en una copia de seguridad hecha desde el teléfono, donde borraría las fotos que quitaste del teléfono.

¿Por qué rsync vuelve a copiar todos los archivos en cada ejecución?

Normalmente porque falta -t, así que las copias llevan la hora en que se hicieron y nunca coinciden con los originales. En una tarjeta SD con FAT32, las horas se guardan con una precisión de dos segundos; añade --modify-window=1 para que rsync trate como iguales las horas que se diferencian en un segundo.

Tu Android, en el Finder.

Gratis durante siete días, sin tarjeta. macOS 26 o posterior.

Descargar para macOS