Estoy tratando de sincronizar de un servidor a otro. Los servidores tienen la misma estructura de directorio, pero tengo problemas para que el servidor de control remoto reconozca correctamente el nombre de la ruta en el control remoto cuando hay un espacio en él.
Aquí están los detalles
El directorio local es
mnt/xlses/split/v2/name with space
El directorio remoto es
mnt/xlses/split/v2/name with space
He intentado todo lo que puedo encontrar, el último intento fue
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
cuando eso se ejecuta, lo primero que informa es que está creando un nuevo directorio
Lo interrumpo y veo que hay un nuevo directorio
mnt/xlses/split/v2/name
todos mis archivos están en ese directorio
Esperaba que estuvieran en
mnt/xlses/split/v2/name with space
Tratar
De
man rsync
:fuente
man rsync
y buscando (/s
) "--protect". Para instalar con homebrew:brew install homebrew/dupes/rsync
Si no lo encuentra, ejecutebrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Esto funciona en bash: escapa de los espacios con una barra diagonal inversa y luego usa comillas:
O si tiene la ruta en la variable $ remote_path, los espacios se pueden escapar con sustitución:
fuente
-s
opción funciona en cualquier versión moderna de rsync y está diseñada para resolver este problemaUsa dos pares de comillas
No te molestes con todas las barras invertidas, solo usa comillas simples dentro de comillas dobles :
También puede usar el reverso, es decir, comillas dobles dentro de comillas simples :
Informacion adicional
Comodines en el lado del servidor
Si quieres una
*
debe ser interpretada en el servidor en lugar del cliente, el*
debe llegar dentro de uno de los 2 pares de comillas. Encuentro esto contrario a la intuición porque lógicamente el par de comillas externo escapa a la interpretación del cliente, mientras que el par de comillas interno escapa a la interpretación del servidor.Proteger Args
La ventaja, en comparación con la
--protect-args
solución , es que en realidad no tiene las restricciones de--protect-args
, por lo que puede usar caracteres especiales como~
o$
. Entonces puedes escribir:o
Tenga en cuenta que tilde (
~
) en el último ejemplo debe estar fuera de las comillas dobles.Puede poner uno de los pares de comillas alrededor del nombre de usuario completo @ host: parte del archivo (por ejemplo
ssh "[email protected]:'/home/me/test file'" .
)fuente
Entiendo que esta es una vieja pregunta, pero pensé que agregaría al cuerpo de conocimiento existente.
Lo he usado
rsync
con múltiples carpetas con espacio y esto funciona. Tengo carpetas numeradas del 1 al 10 de la siguiente manera:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
Las 2 instancias que desea utilizar
rsync
son locales y remotas.Local : tenga en cuenta la falta de comillas.
Remoto : tenga en cuenta la presencia de comillas
fuente
En términos generales, cita el argumento y escapa de los caracteres de espacio en el argumento. En el ejemplo que diste, prueba:
fuente
De las
rsync
páginas del manual:fuente
Bueno, voy a responder esta pregunta yo mismo, aunque alguien más podría explicarlo mejor.
Evidentemente, la configuración en la máquina de destino afecta la forma en que se analizan los argumentos y debemos tener algo configurado que dificulte el uso de comillas o barras para escapar de los espacios, pero podemos usar comodines, así que hice esto
Esto funciona para mí porque solo hay un directorio que comienza con el nombre si tuviera varios directorios, esto no funcionaría.
Finalmente, necesito entender cómo configurar el servidor remoto para que pueda analizar el nombre de la ruta de manera más eficiente: nunca uso espacios en los nombres de directorio, pero la persona que configuró esto lo hizo y al menos por ahora estoy atascado
fuente
Dependiendo de la situación, una opción rápida es crear un enlace simbólico en el sistema remoto:
Luego use la
-L
bandera en larsync
que le dice que siga los contenidos del directorio:fuente
doble escape también funciona
fuente
Intenta de esta manera:
fuente