使用 rsync 只复制特定的符号链接?

使用 rsync 只复制特定的符号链接?

我有一个要使用 rsync 复制的文件夹结构,其中结构是一系列备份,我只想从中复制最新的备份(可以使用符号链接来识别),如下所示:

/backups
    /foo
        /2019-05-01
        /2019-06-01
        /latest -> 2019-06-01
    /bar
        /2019-05-20
        /2019-06-20
        /latest -> 2019-06-20

等等;我想做的是,使用单个 rsync 命令,复制仅有的每个文件夹的备份latest,同时模仿结构。为此,我想出了以下命令:

rsync -rptgoDLm --include '*/' --include '/*/latest/**' --exclude '*' user@remote:/backups /some/local/path

--copy-links基本上是一个带有一些包含/排除技巧的存档,用于仅选择/*/*/latest分支(加上-m避免一堆空目录结构)。除了一个问题之外,这一切都很好;如果这些分支中的任何一个包含符号链接,那么它们也会被复制为目标,而不仅仅是简单的符号链接。

我真正需要做的是仅有的使用--copy-links带有符号链接的行为,同时对遇到的任何其他latest行为使用另一种行为(例如 的行为)。--links

用一个 rsync 命令就能实现这样的功能吗?我的目标是能够在不知道直接内容的情况下运行它/backups,这样如果我添加任何新内容(例如/backups/baz),它将自动复制。

更新:为了澄清,我希望在目标上看到的结果目录结构是:

/backups
    /foo
        /latest
    /bar
        /latest

即-我只需要目标上每个备份的最新版本(目标本身将以另一种方式处理备份历史记录)。

答案1

这似乎符合您的要求

rsync -avR user@remote:'/backups/*/latest/' /some/local/path/

-R标志有效地将整个源路径“复制”到目标中,生成的备份将作为/some/local/path/backups/{whatever}/latest.

如果您发现不需要整个源路径,则可以包含该/./路径以指示应将路径复制到目标的点。例如,/backups/./foo/latest/将导致/some/local/path/foo/latest/(即该/backups组件已被跳过)。文档 ( man rsync) 中有更多详细信息。

相关内容