相同目录名的不同 rsync 行为

相同目录名的不同 rsync 行为

我想同步 2 个代码库。下面的命令工作得很好,除了它没有考虑到我有两个名为的目录的一个用例测试在不同地点:

  • /测试/
  • /开始/测试/

$ rsync -avCz --delete-before --progress --exclude=test /tmp/codebase/ .

我想做的是排除/测试完全来自 rsync 的目录,但我确实想要/开始/测试进行 rsync。

我不想必须拿出一个静态 TXT 文件,我应该将其作为参数传递给 rsync。否则有什么办法可以实现这一目标吗?和谁玩- 包括VS- 排除和一个尾部斜杠 (--排除=测试/)没有按我的预期工作。

答案1

您可以使用前导来/仅在传输的根目录中进行匹配。试试这个:

rsync -avCz --delete-before --progress --exclude=/test/ /tmp/codebase/ .

这是领先的手册页片段/

如果模式以 / 开头,则它将锚定到文件层次结构中的特定位置,否则它将与路径名的末尾进行匹配。这类似于正则表达式中的前导 ^。因此,“/foo”将与“传输根”(对于全局规则)或合并文件目录(对于每个目录规则)中的“foo”名称匹配。不合格的“foo”将与树中任何位置的“foo”名称匹配,因为该算法是从上到下递归应用的;它的行为就好像每个路径组件都在文件名的末尾轮流。即使未锚定的“sub/foo”也会匹配层次结构中名为“sub”的目录中找到“foo”的任何点。

对于尾随/

如果模式以 / 结尾,则它将仅匹配目录,而不匹配常规文件、符号链接或设备。

更新

我从你的评论中猜测你也在寻找这个--delete-excluded选择。

相关内容