Como impedir que o rsync substitua cada arquivo, independentemente de ter sido ou não alterado?

1

Eu quero que rsync copie tudo do diretório "copy_to_home" (que está em um disco rígido formatado em NTFS) para o diretório inicial dos usuários. Eu não quero que apague nada, mas deve substituir os arquivos no lado de recepção, se eles não são os mesmos que os arquivos do lado de envio.

É assim que o comando se parece:

rsync --modify-window=1 -hh --progress -v -r copy_to_home/ ~/

Meu problema é que sempre que executar este comando, o rsync sempre substitui todos os arquivos em ~ , apesar de os arquivos não terem sido alterados. A opção --update não faria isso, mas não substitui arquivos modificados no lado do recebimento.

    
por Joschua 27.12.2015 / 16:00

3 respostas

2

Se a resposta do Quora Feans não ajudar, você poderá adicionar a opção -i ou --itemize-changes para obter o rsync para explicar por que está atualizando os arquivos. Ele imprime uma string formada por chars YXcstpoguax , em que c , por exemplo, significa que a soma de verificação é diferente. Provavelmente, você encontrará os códigos p permissões são diferentes ou o proprietário é diferente. Geralmente, eles são corrigidos usando a opção -a para preservar esses atributos. Se você ainda vê diffs, tente usar --size-only para ter apenas arquivos atualizados se o seu tamanho for diferente (ignorando o timestamp).

    
por 27.12.2015 / 16:43
2

O que você precisa é arquivar os arquivos. Ou seja, a opção -a . Seco corra como:

sudo rsync -avr --dry-run --delete <sourcedir/> <targetdir>

E, de verdade:

sudo rsync -avr --delete <sourcedir/> <targetdir>

Observe o / no final do sourcedir.

    
por 27.12.2015 / 16:26
1

A baixa confiabilidade de registros de data e hora correspondentes sempre que os sistemas de arquivos formatados do Windows estão envolvidos, pode fazer com que os arquivos sejam constantemente mal interpretados como sendo diferentes e, portanto, o rsync acaba copiando tudo. Uma solução para essa baixa confiabilidade de registro de data e hora quando se trata de sistemas de arquivos formatados do Windows, é não comparar o registro de data e hora, mas comparar o conteúdo. O rsync tem a opção -c , então no seu prompt de comando você pode tentar:

$ rsync -c --progress -v -r copy_to_home/ ~/

Explicação

  • sem -c ou --checksum , o rsync normalmente determina se deve atualizar um item ou não, comparando o tamanho do arquivo e os tempos de modificação, o que, como você viu, não é tão confiável quando envolve arquivos e diretórios Windows NTFS apesar de qualquer tentativa de fazê-lo funcionar melhor, como você fez com --modify-window=1
  • se omitirmos a comparação de registro de data e hora ao comparar o tamanho, ainda poderá haver arquivos que terão o mesmo tamanho de arquivo antes e depois de uma alteração e, portanto, serão perdidos se o rsync comparar os tamanhos de arquivo
  • especificar -c faz rsync executar somas de verificação nos arquivos de origem e de destino para fazer a comparação e a decisão. Assim, com checksums, o rsync está decidindo se transfere um arquivo ou não com base em seu conteúdo real, não em seus tempos ou tamanhos de modificação, garantindo assim que nada seja perdido nem desnecessariamente copiado

Desvantagens

  • quanto maiores os arquivos, mais lento ele é executado, por isso, se você estiver usando o rsync com arquivos de tamanho gigabyte, é claro que seria lento. Seria, no entanto, uma melhoria em relação ao rsync, copiando desnecessariamente arquivos de tamanho gigabyte, se essa for a sua situação atual
  • caso contrário, se você tem tipicamente apenas pequenos arquivos de configuração textual em seu diretório inicial que você deseja rsync, então, para computadores modernos, o atraso usando a soma de verificação pode nem ser perceptível
  • ou se você tiver arquivos de tamanho gigabyte e esse processo estiver lento, use o cron para planejar o comando para ser executado fora dos horários de pico
por 27.12.2015 / 17:00

Tags