Quais são as diferenças entre as opções de exclusão do rsync?


118

Vejo na página de manual do rsync que existem várias deleteopções, mas realmente não entendo as diferenças entre elas. Quais são as diferenças entre essas opções?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
Por que --delete-beforeé descrito como (default)? Não consigo entender o que (default)significa.
Marco Marsala

1
Não é mais especificado como padrão na manpágina para rsync version 3.1.2 protocol version 31. No entanto, meu palpite na versão com o texto citado é que, se você usar apenas --deleteao invés de --delete-WHEN, é como se você especificasse --delete-WHENonde o WHENpadrão é before.
Tom Hale

Respostas:


114
  • --del/--delete_during: Exclui arquivos do diretório de destino à medida que são copiados (economiza memória em comparação com --delete-before: --delete-beforefaz uma verificação separada para procurar exclusões)

  • --delete: Exclui arquivos no diretório de destino se eles não existirem no diretório de origem.

  • --delete-before: Exclua os arquivos no diretório de destino antes de copiar o arquivo com o mesmo nome do diretório de origem

  • --delete-during: Exclua os arquivos no diretório de destino AO copiar o arquivo com o mesmo nome do diretório de origem

  • --delete-delay: A marca é excluída durante a transferência, mas aguarde até a transferência ser concluída

  • --delete-after: O receptor exclui após a transferência, não antes ... Se alguma outra parte do rsync moveu arquivos extras para outro lugar, você preferiria isso em vez de --delete-delay, porque --delete-delaydecide o que será excluído no meio da transferência, enquanto --delete-afterverifica o diretório quanto a arquivos que deve ser excluído APÓS tudo terminar.

  • --delete-excluded: Exclui arquivos do diretório de destino explicitamente excluídos da transferência do diretório de origem.

O ponto do rsync não é copiar, é arquivar. Esta é uma distinção importante. O processamento de arquivos excluídos / alterados é essencial e, em muitos casos, diferenciado.

A --deletebandeira em particular é uma que eu já vi estragada muitas vezes. Muitas pessoas usam o rsync para mover arquivos para o armazenamento de baixa prioridade e, nesse caso, você deseja que os arquivos que você está movendo ainda existam no diretório de destino. Não é isso que a exclusão faz: --deletegarante que, quando você exclui um arquivo do diretório de origem, ele TAMBÉM é excluído do diretório de destino, para que o seu destino não fique cheio de lixo ... Uma vez que um cara acabou com o backup colocando uma nova unidade e não desativando o script rsync noturno. O script viu que o diretório de origem agora estava vazio e excluiu todos os arquivos no diretório de destino, para que correspondessem.

A maioria das outras opções está relacionada ao espaço ou ao desempenho. Quando você exclui os arquivos, é importante se você deseja garantir que a transferência seja bem-sucedida antes de fazer qualquer coisa, mas se o seu dispositivo for muito pequeno para lidar com 2 cópias de todas as informações, será necessário excluir conforme você for, etc. um pouco maluco por causa de sua longa história em várias plataformas: algumas opções foram adicionadas para que as pessoas que estavam acostumadas a determinado comportamento não fiquem confusas.


3
Então --delete e --delete-antes do mesmo? O man rsync não diz quando --delete exclui arquivos.
ppr

@pr: Depende do sistema. O motivo de ter tantas opções específicas é porque excluir no Solaris! = Excluir no HP-UX! = Excluir no AIX! = Excluir no Linux.
23630 Satanicpuppy

Ao sincronizar um diretório inteiro, delete-afterexclui cada arquivo entre a sincronização ou somente após o diretório inteiro ter sido espelhado? Eu pensei que delete-afterera suficiente para minhas necessidades, mas não recebo espaço no dispositivo ao fazer backup de uma das minhas unidades.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: Qualquer um. Move tudo o que vai mover e, quando termina, começa a excluir as coisas. Se você quer que apagar tudo antes de ser movido, use --delete-during
Satanicpuppy

2
Depois de alguma experiência, estou descobrindo que nem delete-duringsempre o impede no space left on device(no Linux). Essa delete-beforeé a única maneira garantida de evitá-lo (como ao espelhar uma unidade quase cheia e a unidade de destino também quase cheia).
Sridhar Sarnobat

1

Há duas coisas acontecendo:

  1. Quem faz a exclusão
  2. Quando isso acontece

O remetente ou o destinatário podem ser instruídos a excluir (não sei por que isso importa). Portanto, quando o rsync de um computador se conecta ao servidor rsync do outro lado, isso determina quem está efetivamente emitindo o comando delete.

Quando isso acontece, é bem fácil ... antes significa que todos os arquivos são excluídos e ENTÃO o rsync copia sobre os arquivos. durante os meios enquanto percorre a lista de arquivos, os exclui quando se trata deles e depois significa que aguarda até que todos os arquivos sejam transferidos e exclui o lado remoto. Isso só importa quando a transferência é interrompida.


Tenho certeza de que nenhuma dessas opções está relacionada à exclusão de itens do lado do remetente . Todos eles (AFAIK) estão relacionados à exclusão de itens do lado do receptor . Além disso, você diz: "antes significa que todos os arquivos são excluídos e ENTÃO o rsync copia sobre os arquivos" - está certo? Eu esperaria --delete-beforeexcluir apenas os arquivos que precisavam desaparecer, nem todos os arquivos! Mas eu acho que é possível que o rsync apaga tudo e, em seguida, transfere sobre os dados "novos" (possivelmente inalterado) ...
Quuxplusone

1
Ah, "excluir do lado do remetente" é suportado pelo rsync, mas o nome dessa opção é --remove-source-files.
Quuxplusone 15/05

1

Outro ponto que vale a pena mencionar é que, se o diretório de origem terminar /*, o rsync considerará apenas esses arquivos e não o próprio diretório (e, portanto, a ausência de arquivos que você deseja excluir no destino).

Se você está especificando uma opção de exclusão acima, mas o rsync parece que não está sendo excluído, verifique se você não está bloqueando acidentalmente e fornecendo uma lista de arquivos quando se refere ao próprio diretório.

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.