我有一个符号链接目录 A/,指向目录内容/中的实际文件。
A/ 中的符号链接可以删除,但内容/ 中的文件永远不会被删除。
例如 A/ 如下所示:
A/
--B/
--link1 -> contents/file1.txt<br/>
--C/
--link2 -> contents/file3.txt<br/>
内容/看起来像:
contents/
--file1.txt
--file2.txt
--file3.txt
--file4.txt
因此,内容中的文件可能未被任何人链接。我想使用 rsync 同步两个目录,但只传输实际由链接指向的文件。即传输 file1.txt 和 file3.txt。
我想使用 rsync 传输 A/ 中的链接,跟踪链接并将目标中的链接名称替换为指向的文件的路径。
rsync --link A/* dest/
最后得到:
dest/
--contents/
--file1.txt
--file3.txt
谢谢
答案1
我无法仅使用 rsync 来执行此操作,而是使用 find 和 rsync 的组合。首先,我通过以下操作创建了内容目录的快照
find A/ -type l -exec readlink {} \;
然后我创建了一个 content.snapshot 目录,在该目录中我为 find 命令返回的每个文件创建了一个指向 content.snapshot 目录中内容下的文件的符号链接。
最后,我 rsynced 了 content.snapshot 目录,而不是内容目录。在 rsync 命令中启用文件删除和链接跟踪。
目录结构如下:
contents/
--file1.txt
--file2.txt
--file3.txt
--file4.txt
contents.snapshot/
--contents/
--file1.txt -> ../../contents/file1.txt
--file3.txt -> ../../contents/file3.txt