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 las entiendo perfectamente, ¿alguien puede ayudarme en esto?
¿Cómo puedo escapar de espacios en el nombre del archivo o los nombres de directorio durante la copia ...
Respuestas:
Básicamente necesita escapar dos veces, porque se escapó localmente y luego en el extremo remoto.
Hay un par de opciones que puede hacer (en bash):
fuente
scp [email protected]:'$(ls -t | head -1)' .
obtener el archivo creado más recientemente en el servidor, oscp [email protected]:'dir/*.{xml,pdf}' .
obtener todos los archivos xml y pdf de un directorio remoto. En general, prefiero esto a tener comodidad con archivos que tienen espacios. Los archivos con espacios son siempre una molestia.trabajos
No funciona
La razón es que la cadena es interpretada por el shell antes de pasar la ruta al comando scp. Entonces, cuando llega al control remoto, el control remoto busca una cadena con comillas sin escape 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.fuente
"
o simple'
funciona igualTambién puedes hacer algo como:
El primer nivel de citas será interpretado por scp y luego el segundo nivel de citas preservará los espacios.
fuente
Use 3 barras invertidas para escapar espacios en los nombres de directorios:
scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads
debe copiar a su
Downloads
directoriofile
desde el directorio remoto llamadodirectory with spaces
.fuente
Tuve una gran dificultad para que esto funcione para una variable de shell que contiene un nombre de archivo con espacios en blanco. Por alguna razón usando
como en la respuesta de @ Adrian parece fallar.
Resulta que lo que funciona mejor es usar una expansión de parámetros para anteponer barras diagonales inversas al espacio en blanco , de la siguiente manera.
fuente
file="${file//\ /\\\ }"
Perdón por usar esta pregunta de Linux para poner este consejo para Powershell en Windows 10: el escape de caracteres espaciales con barras invertidas o entre comillas no funcionó para mí en este caso. No es eficiente, pero lo resolví usando el "?" char en su lugar:
para el archivo "task.txt jun-22.bkp" lo descargué usando "task.txt? jun-22.bkp"
fuente