2010-07-26 18 views
5
directorio

Fuente se determina así:edad rsync y espacios en los nombres de archivo

SHOW=${PWD##*/} 
[email protected]:"/mnt/bigfish/video/TV/${SHOW}/" 

así que sale algo como:

[email protected]:/mnt/bigfish/video/TV/The Name Of the Show With Spaces/ 

A continuación, intentar ejecutar rsync así:

rsync -avz -e ssh "${SRC}" . 

Pero me dice que ""/mnt/bigfish/video/TV/The "no es un directorio," "/ mnt/bigfish/video/TV/Name" no es un directorio, etc., ya que el hombre y las palabras delimitadas por espacios están en el nombre del directorio fuente.

¿Cómo puedo rectificar este problema extremadamente molesto?

ACTUALIZACIÓN estoy corriendo en este OS 10.6, y terminé espacios de cadena de sustitución con espacios escapado de este modo:

[email protected]:"/mnt/bigfish/video/TV/${SHOW// /\ }/" 

Respuesta

6

Desde el rsync manual:

-s, --protect-args
Esta opción envía todos los nombres de archivos y la mayoría de las opciones al remoto rsync sin permitir que el shell remoto los interprete. Esto significa que los espacios no se dividen en nombres, y no comodín caracteres especiales no están traducidos (como ~, $,;, &, etc.). Los comodines se expanden en el host remoto por rsync (en lugar de que lo haga el shell).

+0

No existe tal opción en la compilación Darwin 10.4 de rsync en Snow Leopard. – Wells

+0

+1 Definitivamente suena más razonable que mi pensamiento –

+1

@wells: entonces probablemente deberías obtener una versión más actual que la de seis años que Apple decidió enviarte: http://developer.apple.com/mac/library/ documentation/Darwin/Reference/ManPages/10.4/man1/rsync.1.html? useVersion = 10.4 – msw

1

Esto funciona:

rsync -avz -e ssh "[email protected]:\"/mnt/bigfish/video/TV/${SHOW}/\"" 

Así que establezca:

[email protected]:\"/mnt/bigfish/video/TV/${SHOW}/\" 

Al menos, aquí en Debian que funciona como un encanto, sin OS 10 disponibles para probar aquí.

+0

Sí, -s y escaping manual son las soluciones recomendadas. Del manual: "Si necesita transferir un nombre de archivo que contenga espacios en blanco, puede especificar la opción --protect-args (-s), o tendrá que escapar de los espacios en blanco de forma que el shell remoto comprenda " – tokland

2

medida que su pregunta se dedica a OS X, de acuerdo con el Apple rsync manual se puede lograr esto usando comillas simples o el comodín ?:

rsync -av host:'file\ name\ with\ spaces' /dest 
rsync -av host:file?name?with?spaces /dest 

sólo tenía que hacer esto y el uso de las comillas simples funciona a la perfección:

rsync -r --partial --progress --exclude=".cvs" --exclude=".svn" --exclude=".git" --rsh=ssh [email protected]:'/volume1/devel/__To\ SORT/___XXXXX\ Saves\ 2011-04' ./Saves2011 
0

usted puede hacer esto en OSX si usted está tratando con argumentos en un script:

ESCAPED_SRC="$(echo "$SRC" | tr ' ' '\\ ')" 
ESCAPED_DEST="$(echo "$DEST" | tr ' ' '\\ ')" 
rsync -ravP "$ESCAPED_SRC" "$ESCAPED_DEST" 
Cuestiones relacionadas