Tenho dois diretórios, chamo-os de "source" e "dest", que têm alguns arquivos em comum. Há também uma série de arquivos presentes em um, mas não no outro. Gostaria de copiar arquivos de "source" para "dest" se e somente se (1) um arquivo com o mesmo nome estiver presente em ambos os diretórios, e (2) o conteúdo do arquivo for diferente.
O critério "o conteúdo é diferente" é fácil: rsync --checksum -av source/ dest/
. Mas não consigo descobrir como fazer a parte "somente se um arquivo com o mesmo nome estiver presente em ambos".
Use o
--existing
switch. Da página man:por exemplo
rsync --checksum --existing -av source/ dest/
Minha leitura da página de manual sugere que isso fará o que você deseja:
A
--existing
opção é descrita comoskip creating new files on receiver
.A
--no-delete
opção é coberta pela nota listada como--no-OPTION
, descrita comoturn off an implied OPTION
. Então--no-delete
desabilitaria o grupo de opções descritas comoThis tells rsync to delete extraneous files from the receiving side (ones that aren't on the sending side)
.Também troquei a ordem das suas opções
-av
e--checksum
para garantir que o checksum substitua o-t
enabled by-a
. Há alguns lugares na página do manual que enfatizam a importância de colocar opções de substituição após opções de macro como-a
.Leia a seção da página de manual com descrições mais longas da
--delete
opção porque excluir/evitar exclusão não é o tópico mais simples para o rsync.Eu tentaria algo como:
dest
Algo como:
Em vez disso,
--files-from
você também pode tentar--include-from=FILE