Rsync

如何同步符號連結及其所指對象但保留連結

  • May 6, 2013

我的 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/ 下的軟連結並逐一傳輸它們指向的文件?

您可以find與 rsync 的--files-from參數結合使用:

find "${SRC}./en/a" -type l -exec readlink {} ';'|sort|uniq|rsync -avRz --files-from=- "${SRC}" "${DST}"
  • find列出 en/ 文件夾中的所有符號連結,並對每個符號執行 readlink。
  • 然後我們對列表進行排序並過濾掉重複項(使用sortand uniq
  • 並且 rsync 將--files-from參數設置-為讀取它應該從標準輸入同步的文件

引用自:https://serverfault.com/questions/505246