当阅读手册时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
-l
匹配至-K
和-L
'-k'
-k 和 -K 不过是 -l 和 -L 的冗余,
它们只是向后兼容还是有任何区别?
答案1
请参阅以下摘录
-l, --links 当遇到符号链接时,在目标上重新创建符号链接。
-k, --copy-dirlinks 此选项使发送方将指向目录的符号链接视为真实目录。如果您不希望指向非目录的符号链接受到影响,则此选项非常有用,因为它们将使用 --copy-links。
如果没有此选项,如果发送方已用指向目录的符号链接替换了目录,则接收方将删除新符号链接中的任何内容,包括目录层次结构(只要 --force 或 --delete 有效)。
另请参阅 --keep-dirlinks 了解接收端的类似选项。
--copy-dirlinks 适用于源目录中的所有符号链接。如果您只想跟踪几个指定的符号链接,可以使用的一个技巧是将它们作为带有尾部斜杠的附加源参数传递,使用 --relative 使路径正确匹配。例如:
rsync -r --relative src/./ src/./follow-me/ dest/
这是因为 rsync 在给定的源参数上调用 lstat(2),并且尾随斜杠使 lstat(2) 跟随符号链接,从而在文件列表中产生一个目录,该目录覆盖在“src/./”扫描期间找到的符号链接。
-L, --copy-links 遇到符号链接时,将复制它们指向的项目(引用项),而不是符号链接。在旧版本的 rsync 中,此选项还具有副作用,即告诉接收方遵循符号链接,例如指向目录的符号链接。在现代 rsync(例如此版本)中,您需要指定 --keep-dirlinks (-K) 才能获得此额外行为。唯一的例外是将文件发送到太旧而无法理解 -K 的 rsync 时——在这种情况下,-L 选项仍将对较旧的接收 rsync 产生 -K 的副作用。
-K, --keep-dirlinks 此选项使接收方将指向目录的符号链接视为真实目录,但前提是它与发送方的真实目录相匹配。如果没有此选项,接收方的符号链接将被删除并替换为真实目录。
例如,假设您传输包含文件“file”的目录“foo”,但“foo”是接收方目录“bar”的符号链接。如果不使用 --keep-dirlinks,接收方将删除符号链接“foo”,将其重新创建为目录,并将文件接收到新目录中。使用 --keep-dirlinks,接收方将保留符号链接,“file”最终位于“bar”中。
需要注意的是:如果您使用 --keep-dirlinks,则必须信任副本中的所有符号链接!如果不受信任的用户可以创建指向任何目录的自己的符号链接,则该用户随后可以(在后续副本中)用真实目录替换符号链接,并影响符号链接引用的任何目录的内容。对于备份副本,最好使用诸如绑定挂载之类的东西来修改接收层次结构,而不是使用符号链接。
另请参阅 --copy-dirlinks 了解发送端的类似选项。
对于-L
和的情况-K
:
-L
:当遇到符号链接时,将复制它们指向的项目(引用项),而不是符号链接。-K
:此选项使接收方将指向目录的符号链接视为真实目录,但前提是它与发送方的真实目录相匹配。如果没有此选项,接收方的符号链接将被删除并替换为真实目录。
对于-l
和的情况-k
:
-l
:当遇到符号链接时,在目标上重新创建符号链接。-k
:此选项使发送方将指向目录的符号链接视为真实目录。如果您不希望指向非目录的符号链接受到影响,则此选项非常有用,因为它们将使用 --copy-links。