Eu não consigo reproduzir o mesmo comportamento que você está vendo:
$ tree
.
|-- d
| '-- file
'-- s
'-- file
2 directories, 2 files
$ cat s/file
hello
$ rsync -av s/ d
sending incremental file list
sent 63 bytes received 12 bytes 150.00 bytes/sec
total size is 6 speedup is 0.08
Nenhum dado foi transferido, os dois arquivos já eram os mesmos.
$ echo world >>d/file
$ cat d/file
hello
world
$ rsync -av s/ d
sending incremental file list
file
sent 116 bytes received 35 bytes 302.00 bytes/sec
total size is 6 speedup is 0.04
$ cat d/file
hello
Isso mostra que as linhas adicionadas aos arquivos no diretório de destino serão removidas pela repetição de rsync -a
.
Para excluir arquivos no destino que não estão disponíveis no diretório de origem, use --delete
:
$ tree
.
|-- d
| |-- extra_file
| '-- file
'-- s
'-- file
2 directories, 3 files
$ rsync -av --delete s/ d
sending incremental file list
deleting extra_file
./
sent 66 bytes received 29 bytes 190.00 bytes/sec
total size is 6 speedup is 0.06
$ tree
.
|-- d
| '-- file
'-- s
'-- file
2 directories, 2 files
O utilitário rsync
não oferece suporte nativo a solicitações interativas para confirmação antes de excluir arquivos no destino. No entanto, você pode executar com --dry-run
primeiro para ver o que aconteceria se a cópia fosse real.
Observe também que, se você usar rsync -av s/* d
em vez de rsync -av s/ d
, não copiará nenhum arquivo ou diretório oculto no diretório de origem. Isso ocorre porque o padrão *
glob por padrão não se expande para nomes de arquivos ocultos. Arquivos ocultos nos subdiretórios do diretório de origem ainda seriam copiados.