5.4.1.2.3. rsync

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.

5.4.1.2.3.1. Uso básico

El modo más sencillo de utilizar la orden es:

# rsync -r ~/ /media/HDexterno/Personal/

que copiará recursivamente (-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.)

Advertencia

rsync utiliza para el origen la misma notación que BSD para mv y cp. Por tanto, en el ejemplo, los cotenidos del directorio personal se incluirán directamente dentro de 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 posible1 y, además, mostrará (-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 -P o --progress2:

# rsync -aP ~/ /media/HDexterno/Personal/

Pueden durante el proceso excluirse ficheros con --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 llevar se a cabo una nueva sincronización, rsync no lo eliminará. Para que lo elimine es necesario incluir --delete:

# rsync -av --delete ~/ /media/HDexterno/Personal/

5.4.1.2.3.2. Copias remotas

Las versiones modernas de 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 scp. En estas copias remotas es útil la opción -z que comprime los datos. Para sincronizar un directorio local con uno remoto en un servidor SSH3:

# rsync -aPz --delete ~/ usuario@servidor_remoto.com:Personal

o, si es al revés:

# rsync -aPz --delete usuario@servidor_remoto.com:Personal/ ~

Notas al pie

1

-a preserva permisos y propietarios siempre que sea posible, pero no las ACLs, que requiere -A, ni los atributos extendidos, que requiere -X. Mantiene, además, enlaces simbólicos como enlaces simbólicos, pero no enlaces duros para lo cual es necesario -H.

2

En realidad, -P equivale a --progress --partial, donde --partial determina que no se borre el archivo en el destino en caso de que se interrumpiera la copia y la copia del archivo quedra a medias.

3

Usamos -P para aprovechar las posibilidades de --partial.