Como apagar pastas e arquivos no destino que estão faltando na fonte (antes de copiar)?

0

Às vezes, tenho o problema de que rsync tenta transferir um novo arquivo da origem para o destino (ambos têm o mesmo espaço) quando já não há espaço suficiente, o que causa essa mensagem de erro:

rsync: write failed on "{FILE}": No space left on device (28)

No entanto, haveria espaço sobrando, se os arquivos que não existem no diretório source mais forem deletados no destino antes de qualquer arquivo transferido. Estou usando --delete (com o padrão --delete-before ), mas ele exclui apenas um arquivo antes de transferir a versão atualizada.

Então, eu me pergunto, como posso excluir todos os arquivos obsoletos primeiro (usando bash ou rsync)?

    
por Joschua 15.06.2015 / 20:57

1 resposta

1

O sinalizador --delete para rsync fará com que os arquivos no diretório de destino que não aparecem no diretório de origem sejam excluídos. O comportamento padrão é excluir antes de transferir arquivos. (--delete-before)

Quando no modo de recursão incremental (o modo padrão desde o rsync versão 3.0), o rsync processa os diretórios incrementalmente e o "excluir antes" só acontece em uma base por diretório. Ele excluirá os arquivos e, em seguida, copiará novos arquivos em cada subdiretório que encontrar ao encontrá-los.

Se você quiser excluir todos os arquivos a serem excluídos através da árvore de diretórios antes de fazer qualquer cópia, também será necessário desativar o modo de recursão incremental com o sinalizador:

--no-i-r

Observe que isso fará com que ele reverta para o comportamento anterior de coletar as listas de arquivos da árvore de diretórios inteira em ambos os lados da transferência, fazendo todas as exclusões aplicáveis e, em seguida, fazendo todas as cópias. Isso pode levar mais tempo se você tiver uma estrutura de diretório muito grande, mas o comportamento estará correto.

    
por 15.06.2015 / 21:06