![如何仅同步与特定名称符号链接的目录](https://linux22.com/image/128207/%E5%A6%82%E4%BD%95%E4%BB%85%E5%90%8C%E6%AD%A5%E4%B8%8E%E7%89%B9%E5%AE%9A%E5%90%8D%E7%A7%B0%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9A%84%E7%9B%AE%E5%BD%95.png)
我访问了几个涵盖 rsync 和模式的答案,但找不到这个特定问题的解决方案。假设我们在远程计算机上有如下所示的目录结构,并且我们希望将其 rsync 到本地目录。这就像仅镜像远程目录的“最新”部分。
root
|-dir_a
| |-LATEST -> version_3
| |-version_1
| |-version_2
| `-version_3
|-dir_b
| |-LATEST -> version_1
| `version_1
`dir_c
|-LATEST -> version_3
|-version_1
|-version_2
`-version_3
LATEST 是一个符号链接,始终指向远程的最新版本。我目前正在尝试rsync --list-only
使用 shell 脚本处理输出,并仅同步最新版本。这有点痛苦。这是一种预感;我相信有一种方法可以通过一些模式来做到这--include
一点--exclude
。有人可以帮我编写一组可以做到这一点的模式吗?
另外,我更愿意找到一种方法来删除不再是最新的旧版本。我的脚本遍历目录,找到 LATEST 符号链接之外的目录,然后将其删除。 rsync 可以吗?
答案1
我了解到这种模式匹配并不简单。从 root 到 的路径中的所有目录都LATEST
必须包含在包含模式中(使用--include=*/ --include=*/dir_1/
或--filter='+ /' --filter='+ /dir_1/'
)。同样,其他所有内容都必须用--exclude=*
或)排除--filter='- /unwanted_dir/*
。
我的脚本仍然解析--list-only
输出以查找LATEST
符号链接到的位置。之后,我仅包含到达 的路径LATEST
。
我考虑尝试使用 rsync 的命令行参数,以便我可以将 LATEST 作为符号链接及其指向的位置获取。