Como rsync apenas novos arquivos

144

Estou tentando configurar o rsync para sincronizar meu servidor web principal com o servidor remoto, adicionando o arquivo recém-gerado ao posterior.

Aqui está o comando que eu uso:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Mas parece que o servidor web realmente transfere todos os arquivos, apesar do sinalizador '--update'. Eu tentei combinações diferentes de sinalizadores (por exemplo, omitindo '-a' e usando '-vv'), mas nenhuma ajudou. Então, querendo saber como posso modificar o comando rsync para enviar apenas os arquivos adicionados recentemente. obrigado

supermario
fonte
2
Se você deseja sincronizar arquivos com o servidor remoto, não deve vir por último? ie rsync /foo/bar remoteuser@remotehost:/foo/bar
ostrokach
Você pode se interessar por esta página da web . Além disso, tenha cuidado com o sistema de arquivos. Se o sistema de arquivos do servidor não suportar todas as -aopções implícitas (proprietário, grupo, permissões, ...), deve ser a causa do nosso problema.
Ppr
2
Nenhuma das respostas resolve o problema em que os arquivos locais não foram totalmente copiados para o destino remoto e você só deseja sincronizar novamente os arquivos mais recentes.
Axel Bregnsbo
Acabei de encontrar a -copção. Ignora os arquivos existentes com base em uma soma de verificação, em vez do tempo ou tamanho da modificação.
haheute

Respostas:

181

De man rsync:

--ignore-existing       skip updating files that exist on receiver

--updatefaz algo um pouco diferente, e é provavelmente por isso que você está obtendo resultados inesperados (consulte man rsync):

Isso força o rsync a ignorar qualquer arquivo existente no destino e ter um horário modificado mais recente que o arquivo de origem . (Se um arquivo de destino existente tiver um tempo de modificação igual ao do arquivo de origem, ele será atualizado se os tamanhos forem diferentes.)

Chris Down
fonte
11
Bem, na verdade eu tentei o comando com '--ignore-existente' em vez de '--update'. Terminou rapidamente, mas não coloca os novos arquivos no host remoto. Alguma ideia? Graças
supermario
13
As páginas de manual são péssimas (é isso mesmo que eu fui lá), caso em questão, --ignore-existingsignifica não transferir arquivos que existem no receptor ou não transferir arquivos se algum arquivo / pasta com o mesmo nome existir no receptor?
puk
7
--update não ignorar arquivos quando os mtimes são idênticos (que é não o que o texto sugere). Eu testei isso. Acredito que a redação seria melhor compreendida se dissesse "apenas os arquivos de origem mais recentes que o destino serão copiados".
Octopus
4
@Octopus "apenas os arquivos de origem mais recentes que o destino serão copiados" ... ou os arquivos de origem que tenham o mesmo tempo de modificação que os arquivos de destino, mas que tenham tamanhos diferentes . Eu acho que esse é um ponto importante. (Chris já cobertas que, graças)
Jonathan Komar
Então você precisa --ignore-existente e -r (recursivo). -v (detalhado) é bom ter também :-)
DutchUncle
40

No meu caso, tive problemas semelhantes, tendo todos os arquivos transferidos em vez de apenas os modificados / novos. Eu resolvi isso usando parâmetros -t(em vez de -a) e -P(equivalente a --partial --progress):

destino de origem rsync -h -v -r -P -t

Isso transfere apenas novos arquivos e arquivos já existentes, mas modificados: -afunciona demais, como a sincronização de ID de grupo e usuário, que no meu caso não funciona, pois tenho diferentes usuários e grupos nos meus sistemas de origem e de destino.

Os parâmetros em detalhes:

  • -h: números legíveis por humanos
  • -v: verbose
  • -r: recursão em diretórios
  • -P: --partial(mantém arquivos parcialmente transferidos) +
            --progress(mostra o progresso durante a transferência)
  • -t: preservar os tempos de modificação
t0r0X
fonte
2
+1 para '-a faz também much` (na verdade -rlptgoD, de modo que a permissão se não flattended, grupos e proprietário preservada -não meu backup play-seguro típico ...)
Frank Nocke
2

Pela minha experiência com o rsync, uma cópia de partição de 1 TB é muito grande para ser eficiente. Leva o rsync para sempre para processá-lo. Em vez disso, faça-o por subdiretórios. Ou seja, execute o rsync para cada subdiretório principal. Vai muito mais rápido se não precisar manipular dezenas de milhares de arquivos.

turgut kalfaoglu
fonte
11
Talvez você ficou sem memória e seu sistema começou a trocar?
Marcel Burkhard
-2

Experimentar

rsync -zvrt --update SOURCE DESTN
ómega
fonte
8
Um pouco mais de explicação para o comando acima seria apreciada pelo OP.
Peschke
a partir da página homem `-u, --update ignorar arquivos que são mais recentes no receiver`
cadarço