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/ 下的軟連結並逐一傳輸它們指向的文件?
您可以
find
與 rsync 的--files-from
參數結合使用:find "${SRC}./en/a" -type l -exec readlink {} ';'|sort|uniq|rsync -avRz --files-from=- "${SRC}" "${DST}"
find
列出 en/ 文件夾中的所有符號連結,並對每個符號執行 readlink。- 然後我們對列表進行排序並過濾掉重複項(使用
sort
anduniq
)- 並且 rsync 將
--files-from
參數設置-
為讀取它應該從標準輸入同步的文件