我想在两台机器之间同步一个大文件夹层次结构。我想复制符号链接的内容(如果它们是绝对的),例如它指向/some/folder/someFile
我想保留符号链接(如果它们是相对的),例如它指向../../somefolder
我该如何做?
编辑: 基本上我尽量避免递归。我尝试了 --copy-unsafe-links 选项,它复制绝对链接但跳过内部或相对链接,不保留链接。
答案1
我认为您应该能够使用--copy-unsafe-links
rsync 上的选项来复制文件数据,其中符号链接指向同步文件夹空间之外,但当指向的文件也在同步时仅发送符号链接。这是对--links
( -l
,它包含在)之外的补充-a
,用于将复制的层次结构内的相对符号链接复制为符号链接。
如果这还不够精细,您可能必须创建一个您想要发送和不想发送的链接列表,并以包含/排除列表的形式find
将它们作为输入传递。rsync
答案2
使用此 rsync 命令:
rsync -vrtil --copy-unsafe-links --log-file=(logfile) (source_dir) (dest_dir)
到:
保持本地系统上的符号链接相对
对于绝对链接(即以“/”开头),将符号链接指向的文件/目录(即“引用对象”)复制到目标。
#1 的示例:在此示例中,源端有 2 个文件、符号链接和链接到的文件(即“引用对象”,即 docs_home.htm):
(prompt): ls -al docs*
-rwxr-sr-x 1 (owner) (group) 8853 Jul 31 2019 docs_home.htm
lrwxrwxrwx 1 (owner) (group) 13 May 31 2019 docs_home.html -> docs_home.htm
在目的地(又称目标)端,运行上述 rsync 命令后,您将得到:
(prompt): ls -al docs*
-rwxr-sr-x 1 (owner) (group) 8853 Jul 31 2019 docs_home.htm
lrwxrwxrwx 1 (owner) (group) 13 May 31 2019 docs_home.html -> docs_home.htm
#2 的示例:在源端,有一个如下所示的链接:
lrwxrwxrwx 1 (owner) (group) 59 Sep 14 2011 Document13.pdf -> /projects/proj_name/proj_subdir/Document13.pdf
在目标(“目标”)端,运行上面的 rsync 命令后,文件本身已被复制,如运行“ls -al”的结果片段所示:
-rwxrwxr-x 1 (owner) (group) 45874 Sep 14 2011 Document13.pdf