Hoy os vamos a explicar un truco interesante para cuando estemos utilizando el comando rsync poder copiar los ficheros ocultos.

Problema con rsync y los ficheros ocultos

Muchas veces necesitamos copiar directorios y lo que ocurre es que no se copian los ficheros ocultos (.htaccess, .env, .config, etc). Por lo tanto, asumamos este escenario muy común con dos directorios:

$ ls -lat
total 16
drwxrwxr-x  2 t3rr0rz0n3 t3rr0rz0n3 4096 de gen.  29 11:41 dev
drwxrwxr-x  2 t3rr0rz0n3 t3rr0rz0n3 4096 de gen.  29 11:41 prod

Este es el contenido del directorio dev:

ls -lat
total 8
-rw-rw-r-- 1 t3rr0rz0n3 t3rr0rz0n3    0 de gen.  29 11:45 index.html
-rw-rw-r-- 1 t3rr0rz0n3 t3rr0rz0n3    0 de gen.  29 11:45 .env

Cuando usamos rsync para sincronizar los ficheros de dev a prod, esto es lo que ocurre:

$ rsync -av dev/* prod/
sending incremental file list
index.html
📢
Como podéis ver, únicamente ha sincronizado el fichero index.html y no el fichero .env a pesar de que hemos escrito dev/*

Solución para copiar todos los directorios, ficheros ocultos incluidos

Para poder copiar los ficheros ocultos, hay que usar rsync sin poner asteriscos en las rutas.

$ rsync -av dev/ prod/
sending incremental file list
./
.env
index.html
📢
En este caso, si os fijáis, se han copiado todos los ficheros, ocultos incluidos.

Explicación

¿Pero porqué ocurre esto? Pues bien, el problema está relacionado con la forma en que funciona la shell. Hay un mecanismo llamado globbing, que lo que hace es expandir el asterisco con los nombres de archivos antes de que el programa rsync sea llamado.

Por lo tanto, cuando ejecutamos este comando:

rsync -av dev/* prod

La shell lo que hace es ejecutar lo siguiente:

rsync -av index.html prod

De esta forma, el mecanismo llamado globbing, lo que hace es excluir los ficheros ocultos (o también llamados dotfiles) del comando.

Por eso, cuando decimos que en vez de copiar el contenido del directorio sea todo el directorio, no excluye los ficheros ocultos.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación