Cuando usa SSH para conectar rsync a un servidor remoto, ¿cómo escapa de espacios y demás en la ruta remota? Una barra invertida simple escapa del espacio para la solicitud de bash local, pero en la máquina remota, el espacio se lee como una interrupción en la ruta, marcando así el final de esa ruta.
Entonces, cuando hago, rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/
lo que sucede es que el servidor remoto está leyendo eso como justo /path/to/dest/some/
y dado que no puede encontrar ese destino de forma remota, porque el destino real es "algún directorio" en lugar de solo "algunos".
Si intento el mismo comando y escapo de la barra diagonal inversa y el espacio para pasar el indicador bash local y mantener la barra diagonal inversa para el servidor remoto (tres barras diagonales en total:) /path/to/dest/some\\\ dir/
, de hecho envía la barra diagonal inversa al servidor remoto, pero al servidor remoto luego interpreta el camino como en /path/to/dest/some\/
lugar de /path/to/dest/some\ dir/
quitar el espacio y los caracteres que siguen.
Si trato de ajustar el camino con comillas, se comporta de la misma manera, cortando efectivamente el camino en el espacio. Por lo tanto, también solo funciona para pasar el indicador de bash local.
Inicialmente, estaba usando una ruta que tenía un segmento "-" (espacio-guión-espacio), y el servidor remoto estaba devolviendo un error, rsync: on remote machine: -: unknown option
que es lo que inició todo este esfuerzo de escape del espacio en primer lugar.
Entonces, ¿qué debo hacer para que esto funcione correctamente con el servidor remoto, sin tener que eliminar los espacios u otros caracteres erróneos como guiones de la ruta remota?
-s
soluciona sin la necesidad de aplicar doble escape de forma manual.