Rsync sobre la ruta SSH con espacios no funciona con comillas

17

Puedo RSYNC con éxito a través de SSH siempre que las rutas no tengan espacios en ellas.

Cuando el camino tiene espacios, no funciona. He intentado barras, comillas y comillas dobles.

Cuando uso barras inclinadas, el resultado indica que es un éxito, pero no veo ningún archivo transferido.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Cuando uso comillas simples o dobles, me dice que se deniega el permiso después de ingresar mi contraseña

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

¿Que puedo hacer?

Gracias.

AndrewMRiv
fuente

Respuestas:

12

Ampliando la respuesta de rzr con código de ejemplo y referencias, solo agregue la -sbandera, cite las rutas y no se preocupe por escapar de espacios en la ruta remota:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Como referencia, las opciones especificadas por el OP:

  • -a, modo de archivo, es igual a -rlptgoD (no -H, -A, -X)
    • Incluye:
    • -r, --recursive, recurse en directorios
    • -l, --links, copiar enlaces simbólicos como enlaces simbólicos
    • -p, --perms, preservar permisos
    • -t, --times, preservar los tiempos de modificación
    • -g, --group, preservar grupo
    • -o, --propietario, preservar propietario (solo superusuario)
    • -dispositivos, preservar archivos de dispositivo (solo superusuario)
    • -especiales, preservar archivos especiales
  • -v, --verbose, aumenta la verbosidad
  • -z, --comprime, comprime los datos del archivo durante la transferencia

El parámetro adicional necesario:

  • -s, --protect-args, sin división de espacio, solo caracteres comodín
sustrato binario
fuente
13

Necesita escapar espacios en el shell local y el shell remoto. Prueba esto:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

La fuente, /path with spaces/en el shell local, solo se puede escapar mediante comillas simples, es decir '/path with spaces/'.

Por otro lado, en el caso del destino, el shell local se escapa poniendo comillas simples y los espacios se escapan en el shell remoto mediante el uso del carácter de escape ( \) delante de los espacios.

heemayl
fuente
3
Solo para enfatizar: necesita AMBAS comillas y barras invertidas.
Sridhar Sarnobat
2

mira la opción rsync –protect-args (-s), no se necesitan barras adicionales

rzr
fuente
1
Su respuesta mejoraría mucho si proporcionara un ejemplo que el usuario novato pudiera seguir. ¡Gracias!
Élder Geek