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

Sangre fría
fuente
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 .

Adam Zalcman
fuente
7
En efecto '.' resuelve el problema, por ejemplo, rsync -avz [email protected]:/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. :)

Brian Lacy
fuente
¿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.

harleygolfguy
fuente
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.

vkraemer
fuente
3

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

DonCallisto
fuente