rsync reclama sobre links simbólicos

6

Estou usando a opção dry-run (-n) de rsync para comparar diretórios em dois sistemas diferentes. Tudo funciona bem com arquivos e diretórios padrão. No entanto, quando uso um diretório que inclui links simbólicos, recebo erros:

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

Estou muito feliz por não poder apagar o diretório, já que não estou realmente tentando mudar nada, mas por que está tentando? BTW, tentei adicionar as opções -l (links) e -K (links de cópia), sem efeito.

Como posso fazer com que essa comparação funcione mesmo com links simbólicos na estrutura de diretórios?

    
por rojomoke 17.09.2015 / 18:12

1 resposta

7

Como você mostrou, system/nrcalc é um link simbólico no sistema local, mas é um diretório no servidor remoto. Se o diretório no sistema remoto não estiver vazio, o rsync se recusará a apagá-lo (para abrir caminho para o link simbólico) a menos que você especifique --force ou uma das opções --delete . Se você não quiser substituir o diretório no outro extremo, mas ainda precisar atualizá-lo com o conteúdo apontado pelo link local, você pode usar --copy-dirlinks .

O Rsync reclama disso mesmo com --dry-run especificado para alertá-lo sobre o fato de que seria necessário remover o diretório no extremo remoto para fazer o que você está solicitando. Usando qualquer uma das opções que mencionei em conjunto com -n , você terá uma execução limpa e limpa sem realmente excluir nada.

Quanto às outras opções que você tentou:

  • A opção -K ( --keep-dirlinks ) é o equivalente a --copy-dirlinks , exceto no lado do destino. Seu link simbólico está no lado da fonte, e é por isso que essa opção não teve efeito para você.

  • A opção -l ( --links ) garante que os links simbólicos sejam copiados como links simbólicos, mas, novamente, sem --force ou --delete , o rsync se recusará a substituir um diretório não vazio por um symlink. Além disso, -a implica em -l , então você está usando o tempo todo de qualquer maneira.

por 17.09.2015 / 20:57

Tags