rsync no sincroniza el archivo .htaccess


91

Estoy intentando rsync el directorio A de server1 con el directorio B de server2.

Sentado en el directorio A de server1, 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. Cualquier archivo oculto dentro de los subdirectorios se sincroniza.

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 del directorio A no se sincronizan y cómo solucionarlo. Me estoy ejecutando como usuario root.

Gracias


1
Estoy satisfecho con una respuesta, debería aceptarla: meta.stackexchange.com/questions/5234/…
Kutzi

Respuestas:


109

Esto se debe al hecho de que, de *forma predeterminada, se expande a todos los archivos del directorio de trabajo actual, excepto a los archivos cuyo nombre comienza con un punto. Así,rsync nunca recibe estos archivos como argumentos.

Puede pasar .denotando 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 buscarlos en lo que* expande.

Alternativamente, puede usar el siguiente comando para *expandir a todos los archivos, incluidos aquellos que comienzan con un punto:

shopt -s dotglob

Consulte también la página de manual de shopt .


7
En efecto '.' resuelve el problema, por ejemplo, rsync -avz user@domain.com:/remote/path/. /destination/pathhace el trabajo
Mariusz Nowak

57

Para cualquier persona que acaba de tratar a los directorios de sincronización entre los servidores (incluyendo todos los archivos ocultos) - por ejemplo, la sincronización somedirAen el source-serverque somedirBen un servidor de destino - probar esto :

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

Tenga en cuenta las barras al final de ambos caminos. ¡Cualquier otra sintaxis puede conducir a resultados inesperados!


Además, para mí es más fácil ejecutar rsynccomandos desde el servidor de destino, porque es más fácil asegurarse de que tengo el acceso de escritura adecuado (es decir, es posible que deba agregar sudoal comando anterior).

Probablemente no hace falta decirlo, pero obviamente su usuario remoto también necesita acceso de lectura somedirAen su servidor de origen. :)


¿Fue la bandera -e la que sincronizará el .htaccessarchivo?
Jesse Burcsik

1
@JesseBurcsik No, -e sshespecifica el método de conexión.
tripleee

1
Solo necesitas barra en la fuente, el destino no importa
Jonas Stensved

28

Tuve el mismo problema.

Para mí, cuando hice el siguiente comando, los archivos ocultos no se rsync'ed

rsync -av /home/user1 server02:/home/user1

Pero cuando agregué las barras al final de las rutas, los archivos ocultos se sincronizaron.

rsync -av /home/user1/ server02:/home/user1/

Tenga en cuenta las barras al final de los caminos , ya que Brian Lacy dijo que las barras son la clave. No tengo la reputación de comentar sobre su publicación o lo habría hecho.


1
Simplemente agregue shopt -s dotgloba su script antes del rsync
Pian0_M4n

3

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

Considere el siguiente contenido de directorio de ejemplo

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

La expansión comodín del shell traduce la lista de argumentos que obtiene el programa rsync

-av * server2::sharename/B

dentro

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

antes de que el comando comience a ejecutarse.


3

El *tell a rsynch a no sincronizar archivos ocultos. No debe omitirlo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.