К сожалению, на момент написания статьи в Rsync нет встроенного метода.
Решение Майка Фитцпатрика будет работать нормально, однако, если у вас очень большое дерево каталогов, вы можете захотеть сделать что-то, что не заставит rsync снова просмотреть все файлы
РЕДАКТИРОВАТЬ: Существует также ошибка, при которой он не удаляет файл назначения ... чем больше и больше я смотрю на него, это решение не работает ... Я оставляю его, потому что оно может работать в вашем случае, а также, если кто-то хочет Исправить это. Кроме того, кто-то должен отправить официальный запрос на функцию https://bugzilla.samba.org/enter_bug.cgi?product=rsync.
Я написал этот скрипт:
#! /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
Попробуйте вставить скрипт в файл с именем rsync-confirm.bash
затем chmod +x rsync-confirm.bash
затем ./rsync-confirm.bash -rvh /etc/ /tmp/etc/
Этот скрипт может быть немного глючным, я заметил, что он не очень нравится, если у вас нет косой черты в исходном каталоге ...