Como forçar o rsync a sobrescrever arquivos archive somente leitura?

4

Estou usando rsync para copiar algum código-fonte. O código copiado não deve ser modificado no local de destino por meu erro durante a edição do código. Então, eu defino --chmod=u-w flag para torná-lo somente leitura após a cópia.

 rsync --delete -a --chmod=u-w

Primeiro está funcionando bem. Mas a partir da segunda vez, rsync não pode realizar a cópia porque o destino é somente leitura.

rsync: delete_file: unlink "/path/file1" failed: Permission denied (13)
rsync: delete_file: unlink "/path/file2" failed: Permission denied (13)
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

Eu acredito que há um recurso que força rsync a sobrescrever qualquer arquivo, independentemente de somente leitura ou gravável.

Como posso fazer isso?

    
por Eonil 25.09.2012 / 18:09

1 resposta

4

The copied code must not be modified at the destination place

Errado: os arquivos copiados devem ser modificados no local de destino, quando o próximo rsync é executado. As permissões Unix não têm como expressar "deve ser modificado apenas pelo rsync", a menos que você execute esse trabalho rsync como um usuário dedicado.

O rsync não pode excluir os arquivos porque os diretórios que os contêm são somente leitura. Para evitar isso, adicione o prefixo F para aplicar --chmod apenas aos arquivos regulares.

rsync --delete -a --chmod=Fa-w

Você pode ser mais bem atendido por não alterar as permissões de arquivo. Se você precisar fornecer acesso somente leitura aos arquivos, execute o trabalho rsync como um usuário dedicado e conceda a outros usuários apenas permissão de leitura para essa árvore de diretórios ( --chmod=go-w pode ajudar). Como alternativa, exponha a árvore de diretórios em uma visualização somente leitura, por exemplo, com bindfs (consulte esta resposta para um exemplo de uso em um cenário diferente).

    
por 26.09.2012 / 02:40