rsync 跟踪链接并使用在目标中重新创建链接指向的文件的路径

rsync 跟踪链接并使用在目标中重新创建链接指向的文件的路径

我有一个符号链接目录 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

相关内容