2012-05-23 17 views
11

Estoy tratando de escribir un script bash simple para mi máquina local (Mac OS X) para mover archivos desde un directorio en mi máquina a una máquina remota. Esta línea está fallando:Bash scripting rsync: rsync: link_stat (blah) failed: Ningún archivo o directorio (2)

rsync --verbose --progress --stats --compress --rsh=ssh \ 
     --recursive --times --perms --links --delete \ 
     --exclude "*bak" --exclude "*~" \ 
     /repository/* $DEV_SERVER:$REMOTE_DIR 

$DEV_SERVER y $REMOTE_DIR se definen anteriormente, y yo les echo para verificar que son exactos.

El error que estoy recibiendo es:

rsync: link_stat /Users/myusername/mycurrentdirectory failed: No such file or directory (2) 

a señalar aquí es que en lugar de utilizar el directorio definido (/repository, que está en la raíz de la máquina), que utiliza mi directorio de trabajo. ¿Qué está causando esto?

+2

Cita sus variables, por favor! –

Respuesta

23

Comprobar que sus \ personajes no tienen ningún espacio en blanco después de que luego, al final de la línea, ya que esto causa BASH a no interpretar el ajuste de línea correctamente, dando el error rsync anterior

+2

Tu ... acabas de terminar 2 horas de tirar del pelo. te quiero. –

-2

Este:

rsync --verbose --progress --stats --compress --rsh=ssh \ 
    --recursive --times --perms --links --delete \ 
    --exclude "*bak" --exclude "*~" \ 
    /repository/* $DEV_SERVER:$REMOTE_DIR 

debe ser la siguiente:

rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/* $DEV_SERVER:$REMOTE_DIR 

Bash interpreta el carácter \ de manera diferente a la línea de comandos, o tal vez no es un carácter que no sea un espacio en blanco después de que implícita.

+0

¿Cómo maneja bash de manera diferente en sesiones no interactivas? – jordanm

+0

Más adecuado para superuser.com –

+3

El único problema que he tenido con el uso del line-continuation-char (es decir, '\'), en cmd-line O en un script, es cuando hay un caracter además de '\ n 'personaje después de eso. No rechacé tu respuesta, pero no creo que sea correcta. Buena suerte a todos. – shellter

3

Retire el '*' de la ubicación de origen, rsync sabe que mirar en el interior del directorio si se especifica la '/' al final

así:

rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/ $DEV_SERVER:$REMOTE_DIR