![使用 rsync 复制符号链接及其指向的位置](https://linux22.com/image/41934/%E4%BD%BF%E7%94%A8%20rsync%20%E5%A4%8D%E5%88%B6%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%8F%8A%E5%85%B6%E6%8C%87%E5%90%91%E7%9A%84%E4%BD%8D%E7%BD%AE.png)
它不需要由 完成rsync
,但最好不必编写脚本来执行此操作,并且rsync
非常接近我想要的。
rsync -a
(或-l
) 可以保留符号链接,并且-L
可以取消引用符号链接并将其复制,就像它是普通文件/目录一样。但是,是否可以保留符号链接,并复制链接指向的文件/目录?
这是一个例子。假设我们有这个文件夹层次结构:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
当我这样做rsync -aR dirA dest
(或其他事情)时,我希望这些出现在dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
这可能吗rsync
?谢谢。
我们假设可以忽略具有绝对路径或指向源目录外部的符号链接。
答案1
如果您知道符号链接名称并想要传输关联和目标你可以:
rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .
第一个rsync
仅传输symlink
.第二个命令查找真实的目录名称,第二个命令rsync
传输目录内容。
答案2
当且仅当这些都在“mydir”中并且您要将“mydir”从一个地方同步到另一个地方时,这才是可能的。 Rsync 无法复制到您给它的路径之外(以下链接除外)。例如
mydir/dirA ...
mydir/dirB ...
...