La importancia del trailing slash «/» en el path de rsync

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