![如何让 Unison 的行为像 rsync 一样?](https://linux22.com/image/1458552/%E5%A6%82%E4%BD%95%E8%AE%A9%20Unison%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E5%83%8F%20rsync%20%E4%B8%80%E6%A0%B7%EF%BC%9F.png)
我有两个根目录,/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
。
我怎样才能使 Unison 的行为像rsync -a --delete --delete-excluded --delete-after --force $SOURCE/ $DEST
路径bob
和paul
那样?
答案1
事实证明,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
及其所有子文件夹。我还没有尝试过,所以我不能说。