Eu li estes tópicos:
- rsync --delete --files-from = list / dest / não exclui arquivos indesejados
- Excluir arquivos estranhos do diretório dir via rsync?
Mas, tanto quanto posso dizer (talvez esteja faltando alguma coisa), eles não cobrem a seguinte pergunta:
Como você pede rsync
para copiar arquivos e excluir aqueles no lado de recebimento que não existem no lado de envio, com exceções? (por exemplo, não remova um repositório mercurial .hg
no lado de recebimento, mesmo se não houver repositório no lado de envio).
Uma possibilidade?
Empréstimos da resposta de @Richard Holloway abaixo. Digamos que tenho a seguinte linha:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Até onde eu entendi, essa linha faria rsync
excluir tudo no caminho de recebimento que não existe no caminho de envio, exceto as coisas correspondentes dont_delete_me
. Minha pergunta agora é: o rsync manterá os arquivos no lado de recebimento correspondentes, dont_delete_me
mesmo que nada no lado de envio corresponda dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
isso nãorsync
excluiria tudo no caminho de recebimento que não existe no caminho de envio, exceto os itens correspondentesdont_delete_me
? Mais importante,rsync
manteria as coisas no lado receptor correspondidasdont_delete_me
mesmo que nada no lado de envio correspondadont_delete_me
? Se for esse o caso, acho que é a única linha de que preciso, certo?--delete
, a menos que você especifique explicitamente--delete-excluded
. Veja a descrição--delete
e--delete-excluded
no manual do rsync.Eu descobri que a seguinte solução funciona para meus propósitos:
(Nota: adicione a
-n
opção para executar uma execução a seco e não mude--delete
para--delete-excluded
!)A execução do comando causa as seguintes propriedades:
src
diretório de origem permanece não modificadoA
dest
pasta de destino corresponde à pasta de origem, exceto que:do_not_send_to_dest
lista não são enviados para o destino edo_not_modify_in_dest
lista não são modificados no destino.do_not_
arquivos " ".)Explicação
Eu acho que quando o rsync lê os argumentos da linha de comando da esquerda para a direita, o
--delete
argumento parece fazer com que o rsync internamente "alterne os modos" (em certo sentido), permitindo o segundo uso da--exclude-from
opção novamente, mas com um significado diferente.Embargo:
Se um item da
do_not_send_to_dest
lista já existir no destino, então:--delete
para--delete-excluded
excluirá tudo do destino listado em uma das duas listas. xD (Talvez o rsync tenha sido escrito para ser aberto / flexível, mas tem alguns com nuances?)Levemente uso testado.
Estou usando "
rsync version 3.0.9 protocol version 30
".fonte