Exclua os arquivos no destino que são encontrados na origem usando o rsync

3

Eu queria saber se há alguma maneira de excluir todos os arquivos no destino usando rsync , que são encontrados na origem. Tenho mais de 30 dir na origem e mais de 100 arquivos no destino

Eu quero que apenas os 30+ no destino sejam excluídos recursivamente perguntando se rsync ou qualquer outro me ajudaria a fazer isso ...

Fonte

a/
b/
c/

destino

a/
abc/
xyz/
b/
c/
...
    
por Danny 03.09.2014 / 08:44

2 respostas

3

Eu não acho que rsync possa fazer isso, mas você pode fazer uma lista de arquivos, modificá-la e copiá-la como um script para o destino.

Supondo que seus nomes de arquivos não contenham novas linhas ou aspas simples ( ' ), execute-o na máquina de origem:

cd basedir
find . -type f | sed 's/^/rm -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove

copie, em seguida, o arquivo to_remove para a máquina de destino, cd para o diretório base e a origem. Qualquer arquivo que não exista, mas que esteja na lista, não terá nenhum efeito, e outros somente disponíveis no destino não serão tocados.

Se você também quiser excluir diretórios, poderá usar um adicional, mas isso exclui diretórios que existem na origem e estão vazios no destino, independentemente de haver arquivos removidos do diretório ou não.

find . -depth -type d | sed 's/^/rmdir -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove
    
por 03.09.2014 / 09:33
1
cd a
find . -type f -print0 | ssh ${server_name} "cd $path_to_b;cat | xargs -0 rm"
ssh ${server_name} "find ${path_to_b} -empty -type d -delete"

Você receberá mensagens de erro para os arquivos que não existem em b. O segundo comando exclui pastas vazias no destino.

    
por 03.09.2014 / 10:33