La mejor alternativa cuando se quiere tener una copia integra en un sistema remoto utilizando para establecer la conexión ssh, es utilizar rsync en vez de scp, el cual está limitado a la hora de copiar enlaces o conservar propietarios en algunos casos.
Copiar la carpeta conservando enlaces simbólicos / permisos / propietario / enlaces simbólicos y demás.
rsync -Wav --progress /opt/atlassian-cli usuario@dominio:/opt/
rsync de manera predeterminada no elimina archivos cuando estos desaparecen el directorio origen. Cuando se hace una segunda sincronización de dos directorios con rsync y en la carpeta origen se borraron varios ficheros y se agregaron otros nuevos, rsync mantendrá en destino esos ficheros borrados en origen. Solamente agregará los nuevos y modificará los que hayan cambiado de contenido.
Para que la sincronización borre también los ficheros se debe incluir algunas de las opciones “delete” que facilita rsync.
--existing # No crea ficheros nuevos. --ignore-existing # No actualiza ficheros modificados si estos se encuentran ya en destino. --delete / --delete_during # Borra archivos del destino a medida que se copian. --delete-before # Borra archivos en el directorio de destino antes de empezar las transferencias, útil cuando hay problemas de espacio en disco. --delete-delay # Marca los ficheros que se debe borrar y después de la transferencia los elimina. --delete-after # Como delete-delay, pero escanea al final de la transferencia para buscar ficheros que debe borrar. Tiene peor rendimiento que la opción --delete-delay. --delete-excluded # Borra los archivos en destino que están excluidos de la transferencia.
NOTA: Se recomienda leer el manual oficial ya que algunas opciones delete puede tener mejor rendimiento o ser simplemente más idóneas según que otras opciones se utilicen en la ejecución de rsync.
Ejemplos de Rsync borrando ficheros (usando ssh en el puerto 2222).
Hacer una sincronización uno a uno de un directorio, borrando cualquier fichero que haya desaparecido del origen.
rsync -avzh -e "ssh -p 2222" root@dominio.com:/opt/atlassian /opt/ --delete-delay
Borrar únicamente ficheros en destino que NO se encuentren en origen. Sin crear o actualizar ficheros, solo borrar los que no existan en el directorio origen. Para ello se utilizará --existing --ignore-existing --delete-after.
rsync -avzh -e "ssh -p 2222" root@dominio.com:/opt/atlassian /opt/ --existing --ignore-existing --delete-delay
NOTA: Cuidado con equivocarse usando las opciones de borrado de Rsync, si se indica un directorio vació como origen, rsync borrará todo en destino, si son copias de seguridad puede ser un problema. Cuidado al usarlo también en tareas programadas, si alguien borra el origen sin saber/querer, el cronjob borrará el destino cuando este se ejecute.