A la hora de ejecutar un rsync es importante conocer que hay diferencia entre especificar o no los path con una barra final (trailing slash) en el origen de datos. Básicamente, cuando no especificamos la barra final rsync creará en el destino el último directorio del path de origen. Si no lo hacemos, rsync no creará ese directorio y empezará a copiar los archivos que cuelgan de él directamente en la ruta de destino que se especifique.
Para entenderlo mejor ahí va un ejemplo. Tenemos la siguiente estructura de directorios y archivos en origen:
/home/alex/foo/ /home/alex/foo/test1 /home/alex/foo/test2 /home/alex/foo/test3 /home/alex/foo/bar /home/alex/foo/bar/test4 /home/alex/foo/bar/test5
En este primer caso no especificamos la barra del final en el path de origen de rsync:
$ rsync -avz /home/alex/foo /var/tmp sending incremental file list foo/ foo/test1 foo/test2 foo/test3 foo/bar/ foo/bar/test4 foo/bar/test5 sent 332 bytes received 115 bytes 894.00 bytes/sec total size is 0 speedup is 0.00
Vemos que en la ruta de destino «/var/tmp» se ha creado el directorio «foo» junto con todo lo que contenía en origen:
# ls -l /var/tmp/foo/ total 4 drwxr-xr-x 2 alex alex 4096 2014-11-05 12:58 bar -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test1 -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test2 -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test3
Ahora vamos a ejecutar el mismo rsync pero especificando la barra final en el origen de datos:
$ rsync -avz /home/alex/foo/ /var/tmp sending incremental file list ./ test1 test2 test3 bar/ bar/test4 bar/test5 sent 322 bytes received 114 bytes 872.00 bytes/sec total size is 0 speedup is 0.00
En este caso no ha creado el directorio «foo» sino que ha omitido ese directorio y ha empezado a copiar los datos que cuelgan de foo directamente en «/var/tmp»:
$ ls -l /var/tmp/ total 4 drwxr-xr-x 2 alex alex 4096 2014-11-05 12:58 bar -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test1 -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test2 -rw-r--r-- 1 alex alex 0 2014-11-05 12:57 test3