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
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
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.
Comentarios