Как заставить Unison вести себя как rsync?

У меня два корня, /sync а также ssh://bob@remotehost//sync, Эти корни содержат три подпапки: paul, bob а также sam, В настоящее время я синхронизирую их, используя следующий скрипт:

rsync -a --delete --delete-excluded --delete-after --force\
  /sync/paul/ bob@remotehost:/sync/paul
rsync -a --delete --delete-excluded --delete-after --force\
  bob@remotehost:/sync/bob/ /sync/bob
unison /sync/sam ssh://bob@remotehost//sync/sam

Я хочу создать унисонный профиль, который управляет всеми тремя подпапками. Пока у меня есть следующее:

# Define roots and paths
root = /sync
root = ssh://bob@remotehost//sync
path = paul
path = bob
path = sam

# Preserve timestamps
times = true

# Force single direction for some paths
forcepartial = Path paul/* -> /sync
forcepartial = Path bob/* -> ssh://bob@host//sync

Используя этот профиль, я ожидал, что все изменения в /sync/paul распространяться ssh://bob@remotehost//sync/paul и все изменения в /sync/paul быть принудительно удаленным. Я тоже ожидал наоборот за путь bob, Однако это не то, что я вижу. В моих тестовых прогонах Unison хочет распространять новые файлы и папки в обоих направлениях для обоих путей paul а также bob,

Как я могу заставить Унисон вести себя как rsync -a --delete --delete-excluded --delete-after --force $SOURCE/ $DEST для путей bob а также paul?

1 ответ

Решение

Как выясняется forcepartial = Path paul/* -> ... не соответствует sub file- и foldernames, начинающимся с точки (например, paul/.config). Тем не менее, можно использовать BelowPath paul или же Regex paul/.* вместо. Следующее использование BelowPath достиг бы моей цели:

...
forcepartial = BelowPath paul -> /sync
forcepartial = BelowPath bob -> ssh://bob@host//sync

То же самое, но с использованием Regex:

...
forcepartial = Regex paul/.* -> /sync
forcepartial = Regex bob/.* -> ssh://bob@host//sync

На этой странице предполагается, что ключевое слово Regex также может использоваться для сопоставления вложенных папок, подразумевая, что forcepartial = Regex somefolder/.* -> ... будет соответствовать папке paul/somefolder и все его дети. Я не экспериментировал с этим, поэтому не могу сказать.

Другие вопросы по тегам