linux - servidores - transferir archivos por ssh putty
¿Cómo escapar de los espacios en la ruta durante la copia de scp en Linux? (5)
Soy nuevo en Linux, quiero copiar un archivo del sistema remoto al local ... ahora estoy usando el comando scp en el sistema Linux. Tengo algunas carpetas o nombres de archivos con espacios, cuando intento copiar eso archivo, muestra el mensaje de error: "No existe tal archivo o directorio"
Lo intenté:
scp [email protected]:''/home/5105/test/gg/Untitled Folder/a/qy.jpg'' /var/www/try/
Vi algunas referencias en línea pero no entiendo perfectamente, ¿alguien puede ayudarme en esto?
¿Cómo puedo escapar de espacios en nombre de archivo o nombres de directorio durante la copia ...
Básicamente necesita escapar dos veces, porque se escapó localmente y luego en el extremo remoto.
Hay un par de opciones que puedes hacer (en bash):
scp [email protected]:"''web/tmp/Master File 18 10 13.xls''" .
scp [email protected]:"web/tmp/Master/ File/ 18/ 10/ 13.xls" .
scp [email protected]:web/tmp/Master/// File/// 18/// 10/// 13.xls .
También puedes hacer algo como:
scp foo@bar:"/"apath/with spaces in it//""
El primer nivel de citas será interpretado por scp y luego el segundo nivel de citas conservará los espacios.
Tuve grandes dificultades para que esto funcionara para una variable de shell que contenía un nombre de archivo con espacios en blanco. Resulta que usando
file="foo bar/baz"
scp [email protected]:"''$file''"
como en @ Adrian, la respuesta parece fallar (intente ingresar set -x
antes de los comandos anteriores para ver cómo el shell interpreta esta cadena; es bastante extraño y realmente no entiendo por qué falla).
Resulta que lo que funciona mejor es usar una expansión de parámetros para añadir barras invertidas al espacio en blanco , de la siguiente manera.
file="foo bar/baz" # a file inside a directory-name with whitespace
file="${file/// //// }" # the `//` replaces all instances; `/` just replaces the first
scp [email protected]:"$file"
Utilice 3 barras diagonales inversas para escapar de los espacios en los nombres de los directorios:
scp user@host:/path/to/directory/// with/// spaces/file ~/Downloads
debe copiar a su directorio de Downloads
el file
desde el directorio remoto llamado directory with spaces
.
trabajos
scp localhost:"f/a/ b/ c" .
scp localhost:''f/a/ b/ c'' .
No funciona
scp localhost:''f/a b c'' .
El motivo es que el shell interpreta la cadena antes de que la ruta se pase al comando scp. Entonces, cuando llega al control remoto, el control remoto está buscando una cadena con comillas sin escaparse y falla.
Para ver esto en acción, inicie un shell con las opciones -vx, es decir, bash -vx
y mostrará la versión interpolada del comando mientras se ejecuta.