如何 rsync 符号链接及其引用但保留链接

如何 rsync 符号链接及其引用但保留链接

我的 src 目录中有以下文件结构:

en/
en/a/
en/a/file1 -> ../../en/mp3/file1-longer-name-a
en/a/file2 -> ../../en/mp3/file2-longer-name-a
en/mp3/file1-longer-name-a
en/mp3/file1-longer-name-b
en/mp3/file2-longer-name-a
en/mp3/file3-longer-name-a

我有兴趣将 en/a/ 下的所有文件复制到目标位置,保留符号链接,并且还包括引用文件(顺便说一下,它们都在 en/ 中),但如果我正在传输的任何符号链接没有引用 en/mp3/ 下的其他文件,则不包括它们。

我正在使用以下命令,它完成了这项工作的明显部分:

rsync -avRz "${SRC}./en/a" "${DST}"

这将传输以下文件:

en/
en/a/
en/a/file1 -> ../../en/mp3/file1-longer-name-a
en/a/file2 -> ../../en/mp3/file2-longer-name-a

我希望您能帮助我调整 rsync 参数,以便也可以传输以下文件:

en/mp3/file1-longer-name-a
en/mp3/file2-longer-name-a

有没有办法实现这一点,而不需要编写算法来循环遍历 en/a/ 下的软链接并逐个传输它们指向的文件?

答案1

您可以find与 rsync 的参数结合使用--files-from

find "${SRC}./en/a" -type l -exec readlink {} ';'|sort|uniq|rsync -avRz --files-from=- "${SRC}" "${DST}"
  • find列出 en/ 文件夹中的所有符号链接并对每个符号链接执行 readlink。
  • 然后我们对列表进行排序并过滤掉重复项(使用sortuniq
  • 并且 rsync 将--files-from参数设置为-从 stdin 读取应同步的文件

相关内容