.. _rsync: .. index:: rsync rsync ***** :command:`rsync` es una orden que permite sincronizar los contenidos de dos archivos o directorios, sean locales o remotos. La sincronización entre origen y destino, sin embargo, no es constante, sino que se lleva a cabo cada vez que se ejecuta la orden. Tiene algunas ventajas respecto a herramientas similares: - Es capaz de calcular diferencias entre archivos de origen y destino y sólo copiar esas diferencias. Esta posibilidad es muy útil cuando los archivos que se sincronizan son grandes. - Puede sincronizar tanto localmente (archivos en el mismo equipo) como remotamente. Uso básico ========== El modo más sencillo de utilizar la orden es:: # rsync -r ~/ /media/HDexterno/Personal/ que copiará recursivamente (:kbd:`-r`) todos los contenidos del directorio personal en un directorio diferente. Ahora bien, lo que no se copiará es la metainformación de los ficheros (permisos, propietarios, etc.) .. warning:: :command:`rsync` utiliza para el origen la misma notación que |BSD| para :ref:`mv ` y :ref:`cp `. Por tanto, en el ejemplo, los contenidos del directorio personal se incluirán directamente dentro de :file:`Personal`. Más habitual es hacer la sincronización de este modo:: # rsync -av ~/ /media/HDexterno/Personal/ que sí preservará la metainformación en la medida de los posible\ [#]_ y, además, mostrará (:kbd:`-v`) cuáles son los ficheros que se van copiando. Si los ficheros que se copian son muy grandes entonces interesará conocer cuál es el progreso en la copia de cada fichero individual, lo cual puede lograrse añadiendo :kbd:`-P` o :kbd:`--progress`\ [#]_:: # rsync -aP ~/ /media/HDexterno/Personal/ Pueden durante el proceso excluirse ficheros con :kbd:`--exclude`, el cual admite como argumento un expresión expansible de la *shell*:: # rsync -av --exclude "*.swp" --exclude "*.bak" ~/ /media/HDexterno/Personal/ La sincronización, sin embargo, no es perfecta: si habiéndose hecho ya alguna sincronización previa, un fichero deja de existir en el origen, al llevarse a cabo una nueva sincronización, :command:`rsync` no lo eliminará. Para que lo elimine es necesario incluir :kbd:`--delete`:: # rsync -av --delete ~/ /media/HDexterno/Personal/ Copias remotas ============== Las versiones modernas de :command:`rsync` usan por defecto para sus comunicaciones remotas |SSH|, de modo que para expresar el origen o destino remotos se usa la misma sintaxis que en :ref:`scp `. En estas copias remotas es útil la opción :kbd:`-z` que comprime los datos. Para sincronizar un directorio local con uno remoto en un servidor |SSH|\ [#]_:: # rsync -aPz --delete ~/ usuario@servidor_remoto.com:Personal o, si es al revés:: # rsync -aPz --delete usuario@servidor_remoto.com:Personal/ ~ .. rubric:: Notas al pie .. [#] :kbd:`-a` preserva permisos y propietarios siempre que sea posible, pero no las |ACL|\ s, que requiere :kbd:`-A`, ni los :ref:`atributos extendidos `, que requiere :kbd:`-X`. Mantiene, además, enlaces simbólicos como enlaces simbólicos, pero no enlaces duros para lo cual es necesario :kbd:`-H`. .. [#] En realidad, :kbd:`-P` equivale a :kbd:`--progress --partial`, donde :kbd:`--partial` determina que no se borre el archivo en el destino en caso de que se interrumpa la copia y la copia del archivo quede a medias. .. [#] Usamos :kbd:`-P` para aprovechar las posibilidades de :kbd:`--partial`. .. |BSD| replace:: :abbr:`BSD (Berkeley Software Distribution)`