scp de Linux remoto a Windows local con espacios en la ruta local

scp de Linux remoto a Windows local con espacios en la ruta local

Para enviar un archivo desde una terminal Linux a un sistema Windows, los dos ejemplos siguientes funcionan bien.

scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"

Necesito hacer esto donde la carpeta local tiene espacios y no puedo cambiar el nombre, digamos/C:/Users/user.name/test folder/

Todo lo siguiente falla con el mensajescp: ambiguous target

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"

¿Cómo hago para que esto funcione?

Respuesta1

  • Intenta usarquotes 'oDouble quotes "alrededor de un argumento completo.

    Como lo sugiere @dirkt en los comentarios. Citar el argumento de ruta completo para el host ssh debería funcionar. Eso hace que tu comando sea así:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • Usarescape sequence for spaceentre el nombre de la carpeta.

    Puede utilizar \(barra invertida con un espacio), que es una secuencia de escape para un espacio. Eso hace que tu comando sea así:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    Note el \con un espacio entre medio testy foldereso lo hacetest\ folder.

  • Tal vez sea el caso que túneed to escape twiceya que se escapa primero localmente y luego en el extremo remoto. En ese caso puedes escribir así:

    1. "'complete argument'"comillas dentro de comillas dobles como esta:

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      O

    2. Escape los espacios y cite un argumento completo como este:

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      O

    3. Escapar dos veces directamente usando una secuencia de escape como esta

      [email protected]:/C:/Users/user.name/test\\ folder/
      

Siéntase libre de agregar más detalles.

Respuesta2

Probé todas las opciones anteriores para realizar scp desde el cliente CentOS a Windows 7 (SP1), pero sin éxito.

Sin embargo, este funcionó para mí:

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'

Respuesta3

No sé si esto sigue siendo relevante, pero una solución (que podría ser contraproducente en algunas situaciones) es usar "?" en lugar de espacio:

scp "user@ip:/home/user/file?with?spaces.txt" .

Respuesta4

El"El símbolo es interpretado por el propio bash. Bash decapsula cualquier cosa entre interbretes si puede y simplemente presenta la salida a un comando que se llama como una cadena que puede tener algunos símbolos especiales. Intente utilizar el apóstrofe (') porque obliga a bash a no mirar la cadena en absoluto y simplemente pasarla a un comando que se invocó primero. Esas cuerdas con'debe tener el formato siguiente: Si quieres ver

no

echo $'dont\'t'

información relacionada