Soy nuevo en linux, quiero copiar un archivo desde el sistema remoto al local... ahora estoy usando el comando scp en el sistema linux... Tengo algunas carpetas o nombres de archivos son con espacios, cuando trato de copiar ese archivo, se muestra el mensaje de error: "No hay tal archivo o directorio"
Lo he intentado:
scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/
He visto alguna referencia en internet pero no entiendo perfectamente, ¿alguien puede ayudar en esto?
¿cómo puedo escapar de los espacios en el nombre del archivo o nombres de directorio durante la copia...
Básicamente hay que escapar dos veces, porque se escapa 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 .
funciona
scp localhost:"f/a\ b\ c" .
scp localhost:'f/a\ b\ c' .
no funciona
scp localhost:'f/a b c' .
La razón es que la cadena es interpretada por el shell antes de pasar la ruta al comando scp. Así que cuando llega a la remota, la remota está buscando una cadena con comillas sin mayúsculas 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 lo ejecuta.
Usar 3 barras invertidas para escapar de los espacios en los nombres de los directorios:
`scp usuario@host:/ruta/al/directorio con espacios/archivo ~/Descargas``
debe copiar a su directorio de "Descargas" el "archivo" del directorio remoto llamado "directorio con espacios".
Tuve grandes dificultades para hacer que esto funcionara para una variable de la cubierta que contenía un nombre de archivo con espacio en blanco. Por alguna razón usando
file="foo bar/baz"
scp [email protected]:"'$file'"
como en @Adrian' la respuesta parece fallar.
Resulta que lo que mejor funciona es usar una expansión de parámetros para preparar las barras invertidas en el espacio blanco, de la siguiente manera.
file="foo bar/baz"
file="${file//\ /\\\ }"
scp [email protected]:"$file"
Perdón por usar esta pregunta de Linux para poner este consejo para Powershell en Windows 10: el carácter espacial que se escapa con las barras invertidas o rodeadas de comillas no me funcionó en este caso. No es eficiente, pero lo solucioné usando el "?" ...en su lugar:
para el archivo "tasks.txt Jun-22.bkp" Lo descargué usando "tasks.txt?Jun-22.bkp"