Por defeito rsync
não apaga nenhum ficheiro no lado do destino. Para fazer rsync
apagar ficheiros, é necessário utilizar pelo menos uma das opções de apagar.
Se não se importar quando os ficheiros estão a ser apagados, basta usar --delete
e deixar a escolha para rsync
. Pode combinar --delete
com outras opções de apagar (isto não entra em conflito), mas não tem de o fazer, pois todas as outras opções de apagar já implicam --delete
.
--delete-before
funciona da seguinte forma: rsync
procura que ficheiros estão presentes na fonte e que ficheiros estão presentes no destino, apaga todos os ficheiros encontrados no destino mas não na fonte e depois inicia a sincronização real. Esta ordem é útil se o destino tiver pouco espaço de armazenamento, pois primeiro libertará mais espaço em disco no destino antes de começar a transferir quaisquer novos ficheiros. A desvantagem é que rsync
necessitará de mais memória para realizar a operação e toda a operação é um processo de duas etapas e, portanto, mais lento.
--delete-during
funciona da seguinte forma: rsync
começa imediatamente a sincronizar ficheiros e quando se depara com um ficheiro que existe apenas no destino, este é apagado. Desta forma, não há penalização de velocidade e também não é necessária memória adicional. A desvantagem é que pode acontecer que primeiro muitos ficheiros novos sejam copiados para os destinos antes dos ficheiros removidos serem apagados, pelo que o destino pode requerer muito mais espaço de armazenamento em disco durante a operação do que no final, uma vez terminada toda a operação.
--delete-after
funciona da seguinte forma: Primeiro sincronizar todos os ficheiros, depois executar a mesma operação que --delete-before
executa antes da fase de sincronização. Esta é a pior escolha na maioria dos casos comuns, uma vez que requer mais memória, mais espaço em disco no destino, e é mais lenta uma vez que é um processo de duas etapas; basicamente combina todas as desvantagens dos outros dois métodos. Esta opção existe principalmente para o caso em que se está a utilizar “merge files” (o que são ficheiros fundidos e como eles funcionam está para além do âmbito desta resposta). Como estes ficheiros podem conter regras para ficheiros a serem excluídos durante a eliminação, os novos ficheiros de fusão devem ser copiados antes da fase de eliminação se o seu conteúdo for considerado durante a fase de eliminação. A menos que isso seja um requisito, --delete-after
não tem qualquer vantagem.
--delete-delay
é uma opção bastante nova (não está disponível em rsync
2.6.9, que ainda é o padrão em macOS 10.15, por exemplo). Funciona como --delete-during
, excepto que não apaga ficheiros imediatamente, mas após a sincronização ser feita, pelo que é um híbrido de --delete-during
e --delete-after
. A vantagem é que é mais rápido que --delete-after
, a desvantagem é que requer mais memória durante a sincronização.
--delete-excluded
diz a rsync
não só para apagar ficheiros que faltam na fonte, mas também para apagar ficheiros no destino que foram excluídos da sincronização (--exclude
ou --exclude-from
), independentemente de estes ficheiros existirem na fonte ou não.