我想同步 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
选择。