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


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.)


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

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.


11
Talvez você ficou sem memória e seu sistema começou a trocar?
— Marcel Burkhard

-2

Experimentar

rsync -zvrt --update SOURCE DESTN

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.