Как заставить 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
и все его дети. Я не экспериментировал с этим, поэтому не могу сказать.