Necesita ejecutar rsync
dos veces y recomiendo ejecutarlo con -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(a para archivo) es un atajo para -rlptgoD
:
-r
Recurrir a subdirectorios
-l
También sincroniza enlaces simbólicos
-p
También sincronizar permisos de archivos
-t
También sincroniza los tiempos de modificación de archivos
-g
También sincronizar grupos de archivos
-o
También sincronizar propietario del archivo
-D
También sincroniza archivos especiales (no regulares / meta)
Básicamente, siempre que desee crear una copia idéntica uno a uno utilizando rsync
, siempre debe usar, -a
ya que eso es lo que la mayoría de los usuarios esperan que suceda cuando hablan de " sincronización ". Otras respuestas aquí parecen pasar por alto que a veces el contenido de un archivo permanece sin cambios, pero su propietario puede haber cambiado o sus permisos de acceso pueden haber cambiado y en ese caso rsync
no sincronizaría el archivo, lo que podría ser fatal.
Pero también necesita, -u
ya que le dice rsync
que deje completamente cualquier archivo / carpeta solo, en caso de que ya exista en el destino y tenga una fecha de última modificación más reciente. Sin -u
rsync
se sincronizaría independientemente de si un archivo / carpeta es más nuevo o no .
Tenga en cuenta que esta solución no puede manejar archivos eliminados. No es fácil manejar las eliminaciones, ya que considere la siguiente situación: Se eliminó un archivo en el origen, ahora, ¿cómo rsync
sabré si ese archivo existió una vez y se eliminó (en ese caso también debe eliminarse en el destino) o nunca existió en la fuente (en ese caso, debe copiarse desde el destino). Estas dos situaciones parecen idénticas por rsync
lo que no puede saber cómo reaccionar correctamente. No ayudará a sincronizar al revés, ya que puede llevar a la misma situación: existe un archivo en el origen pero no en el destino. ¿Por qué? ¿Nunca ha existido en el destino o se ha eliminado? Ambos casos parecen idénticos a rsync
.
Las herramientas de sincronización que pueden sincronizar archivos eliminados de manera confiable generalmente administran un registro de sincronización sobre todas las operaciones de sincronización anteriores. Si ese registro revela que alguna vez hubo un archivo y se sincronizó, pero ahora falta, está claro que se ha eliminado. Si nunca existió un archivo de este tipo según el registro, debe sincronizarse. Al almacenar todas las entradas de registro con marcas de tiempo, incluso es posible que un archivo eliminado regrese y se elimine varias veces, pero la herramienta de sincronización siempre sabrá qué hacer y el resultado siempre será correcto. rsync
no tiene tal registro, solo se basa en el estado actual del archivo de dos lados de la operación.
Sin embargo, puede crear usted mismo un comando de sincronización utilizando rsync
un poco de script de shell POSIX que ya se acerca mucho a una herramienta de sincronización como se describe anteriormente. Como yo mismo necesitaba una herramienta de este tipo , aquí hay una respuesta en Stackoverflow que lo guía a través de la creación de dicho script.