如何仅同步与特定名称符号链接的目录

如何仅同步与特定名称符号链接的目录

我访问了几个涵盖 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 作为符号链接及其指向的位置获取。

相关内容