Estou encontrando várias respostas para a pergunta, então queria perguntar às pessoas que realmente a usam, em vez de apenas criar o maior blog, preenchendo informações aleatórias semi-inúteis.
Cenário: eu
rsync -av --progress /dir/a /dir/b
e ele faz as coisas.
Eu adiciono novos arquivos ao / dir / a e executo o mesmo comando novamente, ele sabe o que fez e apenas copia os novos arquivos.
Eu adiciono novos arquivos para / dir / a e renomeio alguns arquivos em / dir / b, e talvez alguns também sejam excluídos.
Se eu correr rsync -av --progress /dir/a /dir/b
novamente, o que será copiado? Apenas os novos arquivos porque sabem o que foram copiados anteriormente ou os arquivos que foram renomeados / excluídos também, porque não estão mais presentes.
E, como bônus, se os arquivos copiados anteriormente forem copiados novamente, existe uma maneira de impedir isso, para que apenas novas adições a / dir / a sejam copiadas?
No momento, fico feliz em verificar as coisas manualmente, mas à medida que os dados aumentam, vou precisar de mais automação para executar esta tarefa.
-i
bandeira é muito útil. Para cada arquivo, ele dá uma seqüência de jogo que pode ser decodificado para ver porque ele combinava (bandeira para o tempo de modificação, bandeira para o tamanho, etc.)Respostas:
Não, ele não sabe o que fez em uma execução anterior. Ele compara os dados do lado receptor com os dados a serem enviados. Com dados pequenos o suficiente, isso não será aparente, mas quando você possui diretórios grandes o suficiente, o tempo gasto comparando antes do início da cópia é facilmente sentido.
A verificação padrão é para horários e tamanhos de modificação de arquivo. De
man rsync
:E:
Observe que isso não está implícito nas opções usadas.
-a
é:fonte
--fuzzy
uma vez os reconhecerá como iguais no mesmo diretório. O uso--fuzzy
duas vezes expande esse recurso para outros locais. Vejaman rsync
para detalhes. Obviamente, uma das principais razões para o usorsync
é a capacidade de copiar apenas as partes de um arquivo que foram alteradas. Isso pode tornar as transferências pela rede muito mais rápidas. BTW, a opção de soma de verificação é mencionada acima para explicar comorsync
funciona. Na maioria dos casos, não deve ser usado.Geral
Se eu entendi corretamente,
rsync -av
não tem memória, portanto, ele copiará os arquivos que foram renomeados / excluídos também, porque estão presentes na fonte, mas não estão mais presentes no destino.Dicas
Use a opção
-n
'execução a seco', para verificar o que acontece antes de executar suarsync
linha de comando.Observe o significado especial de uma barra após o diretório de origem e veja a diferença entre
e
descrito no manual
man rsync
.Exemplo
Seu caso especial (adicionar um arquivo ao diretório de origem 'a' e remover um arquivo do diretório de destino 'b') adicionará o arquivo adicionado e o arquivo copiado anteriormente, porque ele ainda está no diretório de origem. Isso acontecerá com e sem a opção
-u
e eu não conheço nenhuma opção norsync
para corrigir isso facilmente, se você quiser mantê-lo no diretório de origem.Mas você pode removê-lo do diretório de origem ou colocar o nome do arquivo no arquivo
excluded
e usar a opção--exclude-from=excluded
(para muitos arquivos) ou simplesmente--exclude=PATTERN
para um ou alguns arquivos.Alternativo:
unison
Você pode testar a ferramenta
unison
, que é uma ferramenta de sincronização . Ele fornece um método visual para identificar casos especiais e decidir o que fazer. Existe uma versão da GUI (unison-gtk
).fonte
unison-gtk
há vários anos e estou feliz com isso. (Eursync
também uso .)Ele copia apenas os novos arquivos em / dir / a. O que você fizer em / dir / b será ignorado, a menos que você use a opção --delete. Nesse caso, os arquivos renomeados em / dir / b serão excluídos. Forçará / dir / b a se tornar exatamente como / dir / a.
Sobre o bônus, você quer dizer como no caso de renomear arquivos em / dir / ae depois sincronizar novamente com / dir / b? Eu não acho que exista uma maneira de impedir que o rsync copie os arquivos novamente nesse caso.
fonte