如何让Unison表现得像rsync?


1

我有两个根, /syncssh://bob@remotehost//sync。这些根包含三个子文件夹: paulbobsam。我目前使用以下脚本同步它们:

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

我想创建一个管理所有三个子文件夹的unison配置文件。到目前为止,我有以下内容:

# 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希望为两个路径在两个方向上传播新文件和文件夹 paulbob

我怎样才能让Unison表现得像 rsync -a --delete --delete-excluded --delete-after --force $SOURCE/ $DEST 对于路径 bobpaul

Answers:


2

事实证明 forcepartial = Path paul/* -> ... 不匹配以点开头的子文件和文件夹名称(例如 paul/.config )。但是,人们可以使用 BelowPath paul 要么 Regex paul/.* 代替。以下使用 BelowPath 会实现我的目标:

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

相同但使用正则表达式:

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

这个 页面建议Regex关键字也可用于匹配子文件夹,这意味着 forcepartial = Regex somefolder/.* -> ... 会匹配该文件夹 paul/somefolder 和它的所有孩子。我没有尝试过这个,所以我不能说。


我建议不要使用Unison为桌面用户同步主文件夹,至少不要使用慢速高清。 Chromium,Firefox等应用程序的状态文件不断变化,使得Unison索引阶段在每个同步会话中持续一段时间。
fuumind
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.