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


Vejo no página de manual do rsync que há um número de delete opções, mas realmente não entendem as diferenças entre eles. 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

100


origem


Por quê --delete-before é descrito como (default)? Não consigo entender o que (default) significa. - Marco Marsala
Não é mais especificado como padrão no man página para rsync version 3.1.2 protocol version 31. No entanto, o meu palpite sobre a versão com o texto citado é que, se você só usar --delete ao invés de --delete-WHENentão é como se você especificasse --delete-WHEN Onde WHEN o padrão é before. - Tom Hale


Respostas:


  • --del/--delete_during: Apaga arquivos do diretório de destino quando são copiados (economiza memória --delete-before: --delete-before faz uma varredura separada para procurar deletáveis)

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

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

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

  • --delete-delay: Marca as exclusões durante a transferência, mas aguarde até que a transferência esteja concluída

  • --delete-after: Receiver apaga após a transferência, não antes ... Se alguma outra parte do rsync moveu arquivos extras em outro lugar, você iria querer isso em vez de --delete-delay, Porque --delete-delay decide o que vai apagar no meio da transferência, enquanto --delete-after verifica o diretório para arquivos que devem ser excluídos depois que tudo estiver terminado.

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

O ponto do rsync não está copiando, está arquivando. Esta é uma distinção importante. O processamento de arquivos excluídos / alterados é fundamental e, em muitos casos, com nuances.

o --delete A bandeira em particular é uma que eu já vi tantas 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 EXISTEM no diretório de destino. Não é isso que delete faz: --delete garante que, quando você excluir um arquivo do diretório de origem, ele também seja excluído do seu diretório de destino, para que seu destino não fique cheio de lixo ... Uma vez viu um cara acabar com o backup colocando uma nova unidade e não desligando seu roteiro noturno de rsync. O script viu que o diretório de origem estava vazio e excluiu todos os arquivos no diretório de destino para que eles correspondessem.

A maioria das outras opções é relacionada a espaço ou desempenho. Quando você excluir os arquivos é importante se você quiser ter certeza de que a transferência é bem sucedida antes de fazer qualquer coisa, mas se o seu dispositivo é muito pequeno para lidar com 2 cópias de todas as informações, você precisa excluir, etc. pouco maluco por causa de sua longa história em várias plataformas: algumas opções foram adicionadas para que as pessoas acostumadas a certos comportamentos não sejam confundidas.


101



Então é --delete e --delete - antes do mesmo? man rsync não diz quando --delete exclui arquivos. - ppr
@ppr: Depende do sistema. O motivo de ter tantas opções específicas é porque delete no Solaris! = Delete no HP-UX! = Delete no AIX! = Delete no Linux. - Satanicpuppy
Quando rsyncing um diretório inteiro, faz delete-after excluir cada arquivo entre a sincronização ou somente após todo o diretório ter sido espelhado? eu pensei delete-after foi suficiente para as minhas necessidades, mas eu não estou ficando espaço no dispositivo quando backup de uma das minhas unidades. - Sridhar-Sarnobat
@ Sridhar-Sarnobat: Ou. Move tudo o que vai mover e, quando terminar, começa a apagar as coisas. Se você quiser excluir antes de mover tudo, use --delete-during - Satanicpuppy
Depois de alguma experiência, eu estou achando que mesmo delete-during nem sempre impede no space left on device (no Linux). assim delete-before é a única maneira garantida de evitá-lo (como ao espelhar uma unidade que está quase cheia e a unidade de destino está quase cheia também). - Sridhar-Sarnobat


Há duas coisas acontecendo:

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

Tanto o remetente quanto o destinatário podem ser instruídos a fazer a exclusão (não sei por que isso é importante). 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 deletados, e ENTÃO rsync copia os arquivos. durante significa que, ao percorrer a lista de arquivos, ele os exclui quando se trata deles e depois significa que aguarda até que todos os arquivos sejam transferidos e, em seguida, exclua o lado remoto. Isso é importante apenas quando a transferência é interrompida.


1



Tenho certeza de que nenhuma dessas opções está relacionada à exclusão de coisas do remetente lado. Todos eles (AFAIK) dizem respeito à exclusão de coisas do receptor lado. Além disso, você diz: "antes significa que todos os arquivos são excluídos e, em seguida, rsync copia os arquivos" - isso é certo? Eu esperaria --delete-before para excluir apenas os arquivos que precisavam ser removidos, não todos os arquivos! Mas eu acho que é possível que o rsync exclui tudo e depois transfere os dados "novos" (possivelmente inalterados) ... - Quuxplusone
Ah, "delete do lado do remetente" é suportado pelo rsync, mas o nome dessa opção é --remove-source-files. - Quuxplusone


Um outro ponto que vale a pena mencionar é que, se o diretório de origem terminar com /*, então o rsync só considerará Essa 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 parece rsync não está excluindo, em seguida, verifique se você não está acumulando acidentalmente e fornecendo uma lista de arquivos quando você quer dizer o próprio diretório.


1