如何使rsync用真实数据替换符号链接?

时间:2016-12-08 11:34:23

标签: linux rsync symlink

我有一些项目使用树数据结构,在较低级别有很多重复。我有大型数据文件,并希望使用不同的数据集运行单片分析。

我可以使用相对的符号链接组织它们,这对我的分析程序很好用,我发现rsync -a可以很好地将整个结构“按原样”复制到备份设备。

例如,使用像......这样的最小配置。

projects/       
    project_1/
        code_1
        data -> ../common_data/data_c
    project_2/
        code_2
        data -> ../common_data/data_b
    common_data/
        data_a
        data_b
        data_c  

相对链接指向正确的位置,如果我做了

rsync -a projects/ projects_backup_path/

然后整个结构转移到备份,仍然可以浏览,然后再移回,这很好。

我还想有时给别人一个完整的项目,为此我需要用真实数据而不是符号链接重建它。

如果我想将project_2放在一根棍子上,包括它的所有数据,我希望能够键入类似

的内容
rsync --replace-links-with-data project_2 stick

并在我的USB记忆棒上结束以下结构

project_2/
    code_2
    data_b

通过阅读手册页以及此处和其他地方有关rsync的问题,似乎可能是-K,-L或-k或-kL开关用于执行此操作。

  -l, --links                 copy symlinks as symlinks
  -L, --copy-links            transform symlink into referent file/dir
  ...
  -k, --copy-dirlinks         transform symlink to dir into referent dir
  -K, --keep-dirlinks         treat symlinked dir on receiver as dir

但是,当我尝试使用这些副本时,我会收到一个“跳过目录xxx”消息,并且不会发生转移。当我运行rsync时,相对位置xxx根据我当前的目录而变化,但它始终是我正在尝试扩展的project_x目标的绝对位置。我错过了什么?

也许是一个相关的问题。我怎么弄清楚哪些不起作用?我还是一个Linux菜鸟。

我知道有不同的方式来安排我的项目,代码和数据,但这适合我和我的客户。我知道还有其他方法来“实现”链接,例如我可以轻松编写一个python脚本来完成工作。但是,如果rsync已经这样做了,那么我想找出要使用的开关,而不是写一些新东西。

我很欣赏这听起来像个愚蠢的问题。我会自由地承认,当我阅读手册页,并尝试我认为会起作用的东西时,它却不会,我觉得自己像个白痴。我们都去过那儿。当我有更多经验时,我将能够理解手册页的上下文。获得这种体验对我来说是一个漫长的艰难斗争。我喜欢命令行,我真的这么做,但只有当文档与行为匹配时,以及不标记的角落情况

1 个答案:

答案 0 :(得分:2)

使用手册。输入man rsync

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

-l, --links                 copy symlinks as symlinks
-L, --copy-links            transform symlink into referent file/dir
    --copy-unsafe-links     only "unsafe" symlinks are transformed
    --safe-links            ignore symlinks that point outside the tree
    --munge-links           munge symlinks to make them safer

-r, --recursive             recurse into directories