Rsync - 将符号链接复制为目录,但如果它们指向文件则跳过

时间:2016-09-21 07:51:51

标签: backup rsync

我有以下结构:

/source/link1/->/dir1
/source/link2/->/dir2
/source/link1/file2 
/source/link1/link11->/dir2/file21

link=symbolic link, file=real file.

在" root"中的目标(远程)目录链接应将源文件夹复制为目录,并且不应复制/source/link1/source/link2文件夹下的链接,或者仅将它们复制为链接(以避免重复结构)。目标结构如下:

/target/link1 - directory
/target/link2 - directory
/target/link1/link11->/target/link2/file21
/target/link1/file2

如何使用rsync维护它? 每日同步需要它 - 每天应该同步目标和源文件夹,并且rsync应该与--delete命令一起使用。

1 个答案:

答案 0 :(得分:6)

Rsync有一系列处理链接的选项(来自手册页):

    -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
    -k, --copy-dirlinks         transform symlink to dir into referent dir
    -K, --keep-dirlinks         treat symlinked dir on receiver as dir

如果顶级链接发生“不安全”且其他链接都“安全”,那么--copy-unsafe-links将为您工作。

否则,我建议你使用一个循环来同步一个顶级目录:

rsync -a --delete /source/link1/ /target/link1/

请注意,-a暗示--links,因此目录中的所有链接都将作为链接逐字复制。顶级link1将被视为目录,如果您使用尾随/取消引用它(即它位于树rsync扫描之外)。