如何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 

有没有一种方法来实现这一点,而不需要写一个algorythm循环在en / a /下的软链接,并将它们指向的文件一一传输呢?

你可以使用find和rsync的--files-from参数结合使用:

 find "${SRC}./en/a" -type l -exec readlink {} ';'|sort|uniq|rsync -avRz --files-from=- "${SRC}" "${DST}" 
  • find列表中的所有符号链接在文件夹中,并执行每个它们的readlink。
  • 然后我们对列表进行sorting,并过滤出重复( sortuniq
  • 和rsync获取-文件- --files-from参数设置为-读取它应该从标准input文件同步的文件