O rsync não está sincronizando o arquivo .htaccess

90

Estou tentando sincronizar o diretório A do server1 com o diretório B do server2.

Sentado no diretório A do server1, executei os seguintes comandos.

rsync -av * server2::sharename/B

mas o interessante é que ele sincroniza todos os arquivos e diretórios, exceto .htaccess ou qualquer arquivo oculto no diretório A. Todos os arquivos ocultos nos subdiretórios são sincronizados.

Também tentei o seguinte comando:

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

mas os resultados são os mesmos.

Alguma idéia de por que os arquivos ocultos do diretório A não estão sendo sincronizados e como consertar. Estou executando como usuário root.

obrigado

Sangfroid
fonte
1
Se você está satisfeito com uma resposta, deve aceitá-la: meta.stackexchange.com/questions/5234/…
Kutzi

Respostas:

108

Isso se deve ao fato de que, *por padrão, é expandido para todos os arquivos no diretório de trabalho atual, exceto os arquivos cujo nome começa com um ponto. Assim, rsyncnunca recebe esses arquivos como argumentos.

Você pode passar .denotando o diretório de trabalho atual para rsync:

rsync -av . server2::sharename/B

Dessa forma, rsyncvocê procurará arquivos para transferir no diretório de trabalho atual, em vez de procurá-los no que se *expandir.

Como alternativa, você pode usar o seguinte comando para *expandir para todos os arquivos, incluindo aqueles que começam com um ponto:

shopt -s dotglob

Veja também a página de manual do shopt .

Adam Zalcman
fonte
7
De fato '.' resolve o problema, por exemplo, rsync -avz [email protected]:/remote/path/. /destination/pathfaz o trabalho
Mariusz Nowak de
54

Para quem está apenas tentando diretórios de sincronização entre servidores (incluindo todos os arquivos escondidos) - por exemplo, a sincronização somedirAon source-servera somedirBem um servidor de destino - tente este :

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

Observe as barras no final de ambos os caminhos. Qualquer outra sintaxe pode levar a resultados inesperados!


Além disso, para mim é mais fácil executar rsynccomandos do servidor de destino, porque é mais fácil garantir que tenho acesso de gravação adequado (ou seja, posso precisar adicionar sudoo comando acima).

Provavelmente nem é preciso dizer, mas obviamente seu usuário remoto também precisa de acesso de leitura somedirAem seu servidor de origem. :)

Brian Lacy
fonte
Foi o sinalizador -e que sincronizará o .htaccessarquivo?
Jesse Burcsik
@JesseBurcsik Não, -e sshespecifica o método de conexão.
tripleee
1
Você só precisa de uma barra na origem, o destino não importa
Jonas Stensved
26

Eu tive o mesmo problema.

Para mim, quando fiz o seguinte comando, os arquivos ocultos não foram sincronizados

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

Mas quando adicionei as barras no final dos caminhos, os arquivos ocultos foram sincronizados.

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

Observe as barras no final dos caminhos , como Brian Lacy disse que as barras são a chave. Não tenho reputação para comentar sobre a postagem dele ou o teria feito.

Harleygolfguy
fonte
1
Basta adicionar shopt -s dotglobao seu script antes do rsync
Pian0_M4n
3

Acho que o problema é devido à expansão do curinga do shell. Usar . em vez de estrela.

Considere o seguinte exemplo de conteúdo de diretório

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

A expansão do curinga do shell traduz a lista de argumentos que o programa rsync obtém

-av * server2::sharename/B

para dentro

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

antes que o comando comece a ser executado.

Vkraemer
fonte
3

O *comando rsynch para não sincronizar arquivos ocultos. Você não deve omitir isso.

DonCallisto
fonte