Мне было интересно, если есть способ сказать rsync только применить изменения (удалить, перезаписать, создать), только если все файлы в списке файлов успешно переданы.
Просто чтобы прояснить, это по сути будет перевод транзакции.
Вы можете использовать файловую систему (btrfs, zfs) со снимками-функциями:
Вы также можете зарегистрировать свои собственные снимки:
Вы можете использовать --delay-updates
или, если вам нужны действительно атомарные обновления, скрипт atomic-rsync
(включен в Debian как /usr/share/doc/rsync/scripts/atomic-rsync.gz
).
На страницах справочника 'rsync' вам может повезти только для удалений:
Некоторые параметры требуют, чтобы rsync знал полный список файлов, поэтому эти параметры отключают режим инкрементной рекурсии. К ним относятся: --delete-before, --delete-after, --prune-empty-dirs и --delay-updates. Из-за этого режим удаления по умолчанию при указании --delete теперь имеет значение --delete-while, когда оба конца соединения имеют как минимум 3.0.0 (используйте --del или --delete-while, чтобы запросить этот улучшенный режим удаления. явно). Смотрите также параметр --delete-delay, который лучше, чем использование --delete-after.