Exclui arquivos que existem na origem com rsync

1

Eu tenho uma pasta no servidor "A" chamada ./delete .

Eu quero excluir tudo na pasta ./stuff no servidor "B" que existe na pasta ./delete no servidor "A".

É como o reverso do rsync. em vez de transferir arquivos de a:/delete para b:/stuff , quero apenas excluir todos os arquivos que estão nos dois locais no servidor "B".

como um sinalizador --delete-on-destination ou algo assim.

    
por chovy 21.08.2013 / 05:13

2 respostas

-1

Eu não acho que o rsync possa resolver seu problema. Mas outra ferramenta de sincronização pode ajudá-lo. Dê uma olhada no uníssono .

O Unison tem muitos recursos e pode sincronizar duas pastas em máquinas diferentes. O uníssono é escrito em OCaml que é uma linguagem funcional encantadora.

O Rsync é uma ferramenta de sincronização unidirecional. A Unison é uma ferramenta de sincronização bidirecional.

    
por 21.08.2013 / 08:13
0

Ferramentas de cópia de arquivos, como o rsync, não o ajudarão facilmente, já que você não deseja copiar nenhum arquivo.

A abordagem direta de listar os arquivos no servidor A e apagar esses arquivos no servidor B é boa na maioria das circunstâncias. É mais fácil lidar com nomes de arquivos arbitrários se os comandos ' find e xargs ' dos seus servidores entenderem os separadores nulos (Linux, * BSD, Cygwin). De A:

cd ./delete
find . ! -type d -print0  | ssh B 'cd /path/to/stuff && xargs -0 rm -f'

Isso pode deixar alguns diretórios vazios para trás. Você pode excluir todos os diretórios vazios (mesmo os que estavam vazios antes) com

ssh B 'cd /path/to/stuff && find . -depth -type d -exec rmdir {} + 2>/dev/null'

Se você quiser apenas remover os diretórios que existiam no lado da origem, será necessário usar a lista novamente:

find . -depth -type d -print0  | ssh B 'cd /path/to/stuff && xargs -0 rmdir'

Se houver árvores de diretórios em A que contenham muitos arquivos e não existam em B, isso transfere toda a lista de arquivos para apagar onde um rm -rf em B bem escolhido faria o mesmo trabalho localmente B, mas economizaria muita largura de banda na transferência. Esse é o tipo de situação em que uma ferramenta de sincronização de arquivos se sairia bem. Você pode executar rsync -nv e tentar analisar a saída, mas não é fácil criar algo confiável sobre isso.

    
por 22.08.2013 / 00:27

Tags