5

Мне было интересно, если есть способ сказать rsync только применить изменения (удалить, перезаписать, создать), только если все файлы в списке файлов успешно переданы.

Просто чтобы прояснить, это по сути будет перевод транзакции.

3 ответа3

4

Вы можете использовать файловую систему (btrfs, zfs) со снимками-функциями:

  • снимок вашего текущего состояния
  • Rsync
  • проверьте код выхода rsync и откат при необходимости

Вы также можете зарегистрировать свои собственные снимки:

  • сделать копию файлов (это становится рабочей областью)
  • rsync к рабочей зоне
  • проверьте код выхода rsync и переместите рабочую область поверх исходных файлов, если код выхода в порядке.
3

Вы можете использовать --delay-updates или, если вам нужны действительно атомарные обновления, скрипт atomic-rsync (включен в Debian как /usr/share/doc/rsync/scripts/atomic-rsync.gz).

2

На страницах справочника 'rsync' вам может повезти только для удалений:

Некоторые параметры требуют, чтобы rsync знал полный список файлов, поэтому эти параметры отключают режим инкрементной рекурсии. К ним относятся: --delete-before, --delete-after, --prune-empty-dirs и --delay-updates. Из-за этого режим удаления по умолчанию при указании --delete теперь имеет значение --delete-while, когда оба конца соединения имеют как минимум 3.0.0 (используйте --del или --delete-while, чтобы запросить этот улучшенный режим удаления. явно). Смотрите также параметр --delete-delay, который лучше, чем использование --delete-after.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .