O rsync compara arquivos de várias maneiras - a fonte oficial é a descrição do algoritmo rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . O artigo da wikipedia sobre rsync também é muito bom.
Para arquivos locais, o rsync compara os metadados e, se parecer que não precisa copiar o arquivo, porque o tamanho e o carimbo de data / hora correspondem entre a origem e o destino, ele não procura mais. Se eles não corresponderem, é o arquivo cp. No entanto, e se os metadados corresponderem, mas os arquivos não forem realmente os mesmos? Então o rsync provavelmente não fez o que você pretendia.
Arquivos com o mesmo tamanho ainda podem ter sido alterados. Um exemplo simples é um arquivo de texto onde você corrige um erro de digitação - como alterar "teh" para "the". O tamanho do arquivo é o mesmo, mas o arquivo corrigido terá um carimbo de data / hora mais recente. --size-only
diz "não olhe para a hora; se o tamanho corresponder, presuma que os arquivos correspondem", o que seria a escolha errada neste caso.
Por outro lado, suponha que você acidentalmente tenha feito um grande cp -r A B
ontem, mas tenha se esquecido de preservar os carimbos de hora e agora deseja fazer a operação ao contrário rsync B A
. Todos os arquivos que você copiou têm a data e hora de ontem, embora não tenham sido realmente modificados ontem, e o rsync irá, por padrão, copiar todos esses arquivos e atualizar a data e hora para ontem também. --size-only
pode ser seu amigo neste caso (módulo do exemplo acima).
--ignore-times
diz para comparar os arquivos independentemente de os arquivos terem o mesmo tempo de modificação. Considere o exemplo de erro de digitação acima, mas você não apenas corrigiu o erro de digitação, mas também touch
fez com que o arquivo corrigido tivesse o mesmo tempo de modificação do arquivo original - digamos que você seja furtivo assim. Bem --ignore-times
irá fazer uma comparação dos arquivos , embora o tamanho e tempo de jogo.