o comando rsync faz cópia incremental ou sobrescreve o arquivo?

4

O comando rsync é usado para sincronizar os dados de uma pasta para outra pasta. Eu quero saber se este comando sobrescreve todo o arquivo e sincroniza ou copia apenas o novo arquivo ou arquivo alterado. Será que o prompt se arquivo de nome semelhante é encontrado na pasta de destino?

    
por Aryan 09.09.2015 / 22:27

3 respostas

3

Depende realmente dos sinalizadores passados para rsync , mas por padrão rsync espelha arquivo (s) inteiro (s) da origem para o destino, embora você possa personalizar o que acontece com um grau com --update ou --existing ou --ignore-existing ou também vários excluem complicações ( --exclude , --delete , --delete-excluded ) entre outras opções ( --prune-empty-dirs , etc).

Não há (graças a Deus!) nenhum aviso (exceto para senhas), e não há suporte para "nome similar" que eu conheço (qual caso de uso exigiria isso?).

    
por 09.09.2015 / 22:52
3

rsync geralmente criará uma nova versão de um arquivo ao lado do destino e, em seguida, alternará para o nome do destino no último momento, quando estiver concluído. A nova versão pode ser criada usando deltas, ou seja, alterações entre a origem e o destino ou como uma cópia completa. (Veja minha resposta para transferências de arquivos mais inteligentes do que o rsync? para esclarecer essa diferença.)

O --partial sinalizador diz rsync para manter e usar qualquer arquivo parcialmente transmitido como destino se a conexão for interrompida por qualquer motivo. (Caso contrário, um arquivo parcialmente transmitido é descartado).

O --inplace sinalizador diz rsync para criar o arquivo de destino diretamente no lugar. Isso geralmente é menos eficiente no tempo, mas evita ter duas cópias completas do arquivo de destino no sistema de arquivos remoto simultaneamente.

    
por 09.09.2015 / 23:42
0

Da página do manual:

It is famous for its delta-transfer algorithm, which reduces the amount 
of data sent over the network by sending only the differences between 
the source files and the existing files in the destination.

Você pode ver isso em ação com um teste:

$ mkdir foo bar
$ echo "a" > foo/a
$ rsync -av --stats foo/ bar/
sending incremental file list
./
a

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 1
--> Total file size: 2 bytes
--> Total transferred file size: 2 bytes
...blah blah blah...

Isso estabelece que um rsync inicial envia 2 bytes de dados de diretórios de origem para destino.

Agora adicione um novo arquivo e rsync:

$ echo "b" > foo/b
sending incremental file list
./
b

Number of files: 3 (reg: 2, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 1
--> Total file size: 4 bytes
--> Total transferred file size: 2 bytes
...blah blah blah...

Aqui, o rsync vê corretamente que todos os arquivos totalizam 4 bytes, mas apenas 2 precisam ser enviados. Em outras palavras, não sobrescreve o arquivo existente.

    
por 10.09.2015 / 00:00

Tags