Comparação recursiva e exclusão (sem rsync ou hashing)

2

Eu tenho usado o rsync para sincronizar pastas e funciona bem. O problema é que, mais recentemente, comecei a sincronizar pastas com arquivos maiores nelas, e isso leva muito mais tempo do que eu gostaria (devido à sua comparação de hash). Eu notei que os comandos cp podem fazer uma parte do trabalho rsyncs muito mais rápido, invocando a opção -u. Isso significa que arquivos mais novos na origem podem ser adicionados facilmente ao destino usando esse método.

Mas o que eu preciso descobrir é a segunda parte do trabalho de rsync que eu acho útil. Este é um comando que pode recursivamente comparar a lista de arquivos em todas as pastas, e excluir aqueles que não estão mais presentes na fonte, mas que ainda estão no destino (mas sem executar um hash em todos os arquivos, uma comparação simples usando o O comando ls, por exemplo, é bom o suficiente para o que eu quero).

Isso é possível?

    
por tambungant 29.06.2016 / 04:31

2 respostas

0

Isto irá (fingir) excluir quaisquer diferenças entre as pastas:

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | while read f; do echo "removing ${f}"; done;

Se você quiser remover diferenças em A, mas não em B, você pode adicionar um grep assim:

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | grep "^folderA/" | while read f; do echo "removing ${f}"; done;

observe que você precisa digitar folderA no comando duas vezes para este

Para executá-lo de verdade, basta substituir echo "removing ${f}"; por rm -f "${f}";

    
por 29.06.2016 / 10:04
0

Você pode consultar este link neste link. O rsync está tendo o recurso de excluir a pasta que não sai no live ENV .

rsync -av --delete

    
por 29.06.2016 / 05:38