Faça com que o rsync atualize os arquivos existentes primeiro, crie novos depois?

1

Eu tenho um diretório de origem que eu estou periodicamente sincronizando com um alvo usando o rsync:

rsync --bwlimit=1600 --recursive --times
      --omit-dir-times --copy-links --modify-window=30
      --inplace --delete-before --progress --stats --whole-file
      --itemize-changes --human-readable ./ /media/0123-4567/

A mídia de destino é apenas o tamanho certo para a sincronização: o destino é uma partição de 1000 MB, a origem tem 990 MB de arquivos; a sincronização da origem para um destino vazio funciona bem.

O problema é quando estou sincronizando com um destino que contém uma versão mais antiga: alguns dos arquivos de origem existentes são menores na versão atual e alguns novos são adicionados. O tamanho total permanece 990 MB; mas o rsync parece escolher uma estratégia "copie primeiro os novos arquivos, depois atualize o existente", a primeira parte não funcionará, porque o espaço que deveria ser liberado com a atualização ainda não está disponível.

                                       version 1     version 2
 files not changed:                     800 MB        800 MB
 new files in v2:                         0 MB         80 MB
 files changed between versions:        190 MB        110 MB 

 total                                  990 MB        990 MB

Em outras palavras, como posso fazer o rsync atualizar o alvo primeiro (o que, no meu caso, liberar espaço), e só então adicionar novos arquivos ?

Até agora, eu invadi isso com duas invocações separadas, diferindo apenas nesse parâmetro:

rsync --existing [...]
rsync --ignore-existing [...]

Isso atualizará os arquivos existentes primeiro e copiará os novos posteriormente; Existe uma maneira de fazer isso com um comando?

    
por Piskvor 11.05.2014 / 13:47

1 resposta

3

So far, I have hacked around this by having two separate invocations, only differing in this parameter:

rsync --existing [...]
rsync --ignore-existing [...]

Sim, essa é a maneira correta.

This will update the existing files first, and copy the new ones later; Is there a way to do this with one command?

Não é necessário:

  • Da perspectiva da velocidade, você está apenas sacrificando algumas despesas indiretas insignificantes
  • Da perspectiva da documentação, isso é muito mais claro ao declarar o que você está fazendo do que algumas formas implícitas.
por 11.05.2014 / 15:44

Tags