Infelizmente, ainda não existe um método incorporado no Rsync.
A solução de Mike Fitzpatrick funcionará bem, no entanto, se você tiver uma árvore de diretórios muito grande, poderá fazer algo que não faça o rsync passar por todos os arquivos novamente
EDIT: Há também um erro em que ele não exclui um arquivo de destino ... quanto mais eu olho para ele, esta solução está quebrada ... Estou deixando de lado porque pode funcionar no seu caso e também se alguém quiser para fixar isso. Além disso, alguém deve enviar uma solicitação formal de recurso para https://bugzilla.samba.org/enter_bug.cgi?product=rsync
Eu escrevi este script:
#! /bin/bash
# Make a temp file for storing the output of rsync
tmpfile=$( mktemp ) &&
# Do all the hard work ( get the list of files we need to update ),
# but dont actually change the filesystem
rsync --dry-run --out-format='RSYNC_CONFIRM %i %n%L' "$@" | grep RSYNC_CONFIRM | awk '{ print $3 }' > $tmpfile &&
# Output to the user what we propose to do
rsync --dry-run --itemize-changes --files-from=$tmpfile "$@" &&
# Alternatively, we could just output $tmpfile... but whatever...
read -p "Continue? (y/n)?" &&
if [[ $REPLY = [yY] ]]
then
{
rsync --files-from=$tmpfile "$@"
}
fi
rm $tmpfile
Tente colar o script em um arquivo chamado rsync-confirm.bash
Então chmod +x rsync-confirm.bash
Então ./rsync-confirm.bash -rvh /etc/ /tmp/etc/
Esse script pode ser um pouco complicado, notei que ele realmente não gosta se você não tiver uma barra no diretório de origem ...