2012-01-28 32 views
52

Estoy tratando de sincronizar el directorio A del servidor1 con el directorio B del servidor2.rsync no sincroniza el archivo .htaccess

Sentado en el directorio A del servidor1, ejecuté los siguientes comandos.

rsync -av * server2::sharename/B 

pero lo interesante es, que sincroniza todos los archivos y directorios, excepto .htaccess o cualquier archivo oculto en el directorio A. Todos los archivos ocultos dentro de los subdirectorios se sincronizan.

También probé el siguiente comando:

rsync -av --include=".htaccess" * server2::sharename/B 

pero los resultados son los mismos.

Alguna idea de por qué los archivos ocultos de un directorio no se sincronizan y cómo solucionarlo. Me estoy ejecutando como usuario root.

gracias

+1

He quedado satisfecho con una respuesta, debe aceptarla: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Kutzi

Respuesta

71

Esto se debe al hecho de que * es por defecto ampliado a todos los archivos en el directorio de trabajo actual, excepto los archivos cuyo nombre empieza con un punto. Por lo tanto, rsync nunca recibe estos archivos como argumentos.

Puede pasar . denota directorio de trabajo actual a rsync:

rsync -av . server2::sharename/B 

De esta manera rsync buscará archivos para transferir en el directorio de trabajo actual en lugar de mirar para ellos en lo que se expande a *.

Como alternativa, puede utilizar el siguiente comando para hacer * expanda a todos los archivos incluidos los que comienzan con un punto:

shopt -s dotglob 

Ver también shopt manpage.

+4

Indeed '.' resuelve el problema, p. 'rsync -avz [email protected]:/remote/path /./destination/path' hace el trabajo –

2

El * indica a rsynch que no se sincronicen los archivos ocultos. ¿Has intentado omitirlo?

3

Creo que el problema se debe a la expansión del comodín de la shell. Utilizar . en lugar de estrella.

consideremos el siguiente ejemplo el contenido del directorio

$ ls -a . 
. .. .htaccess a.html z.js 

expansión de comodines de la shell traduce la lista de argumentos que el programa rsync obtiene de

-av * server2::sharename/B 

en

-av a.html z.js server2::sharename/B 

antes se inicie la orden siendo ejecutado

31

Para cualquier persona que intente sincronizar directorios entre servidores (incluidos todos los archivos ocultos), p., La sincronización somedirA en source-server-somedirB en el servidor de destino - probar este:

rsync -avz -e ssh --progress [email protected]:/somedirA/ somedirB/ 

Nota las barras al final de los dos caminos. ¡Cualquier otra sintaxis puede conducir a resultados inesperados!


Además, para mí es más fácil de realizar rsync comandos desde el servidor de destino, porque es más fácil para asegurarse de que tengo acceso de escritura correcta (es decir, puede ser que tenga que añadir sudo al comando anterior).

Probablemente es evidente, pero obviamente su usuario remoto también necesita acceso de lectura a somedirA en su servidor de origen. :)

+0

¿Fue el distintivo -e que sincronizará el archivo '.htaccess'? –

+0

@JesseBurcsik No, el '-e ssh' especifica el método de conexión. – tripleee

+0

Solo necesita barras en la fuente, el destino no importa –

9

Tuve el mismo problema.

Para mí cuando hice el siguiente comando los archivos ocultos hicieron no conseguir rsync'ed

rsync -av /home/user1 wobgalaxy02:/home/user1 

Pero cuando he añadido las barras al final de los caminos, se rsync'ed los archivos ocultos .

rsync -av /home/user1/ wobgalaxy02:/home/user1/ 

Nota las barras al final de los caminos, como Brian Lacy dijo que las barras son la clave. No tengo la reputación de comentar sobre su publicación o lo hubiera hecho.