如何让 Unison 的行为像 rsync 一样?

如何让 Unison 的行为像 rsync 一样?

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

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

我怎样才能使 Unison 的行为像rsync -a --delete --delete-excluded --delete-after --force $SOURCE/ $DEST路径bobpaul那样?

答案1

事实证明,forcepartial = Path paul/* -> ...不匹配以点开头的子文件和文件夹名称(例如paul/.config)。但是,可以使用BelowPath paulRegex 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及其所有子文件夹。我还没有尝试过,所以我不能说。

相关内容