Rsync

rsync 用符號連結替換現有目錄

  • July 5, 2018

在 server1 上:/dir1 是 dir2 的符號連結

在 server2 上:/dir1 是一個有自己內容的目錄

我想使用 rsync 使 server2:/dir1 成為 dir2 的符號連結,就像它在 server1 上一樣。

如果我在 server1 上執行此操作:

rsync -azvs --delete /dir1 user@server2:/dir1

然後我實際上在 server2 上得到了一個新的(損壞的)符號連結:

/dir1/dir1 -> dir2

(因此它將符號連結複製到現有的 /dir1 目錄中,而不是替換它)

我可以改為讓 rsync 用符號連結踐踏現有的 /dir1 目錄嗎?

編輯:我認為上述命令會起作用,因為該--copy-dirlinks部分下的 man for rsync 中有此評論:

如果沒有此選項,如果發送方已將目錄替換為指向目錄的符號連結,則接收方將刪除妨礙新符號連結的任何內容,包括目錄層次結構(只要 –force 或 –delete已生效)。

--force但是,無論有無,有無 ,行為看起來都是一樣的-k

問題是您指定/dir1為目的地。你需要上一層樓。

rsync -azvs --delete /dir1 user@server2:/

我不明白您為什麼要使用 Rsync 在同一伺服器中創建符號連結。也許我誤解了您的問題,但是如果您想在 server2中使用****/dir2中的原始碼和**/dir1**中的連結創建符號連結,您應該簡單地執行: ln -s /dir2 /dir1

以防萬一,如另一個答案中所述,並用您的線路擴展問題。

解構你的命令:

rsync -azvs --delete /dir1 user@server2:/dir1

您正在執行 rsync、歸檔模式(遞歸、所有者、組、包括符號連結作為符號連結等)、壓縮、詳細且無空格分割:

   -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
   -z, --compress              compress file data during the transfer
   -v, --verbose               increase verbosity
   -s, --protect-args          no space-splitting; wildcard chars only

此外,您正在刪除目的地差異:

       --delete                delete extraneous files from dest dirs

然後你使用 as origin /dir1,這意味著整個目錄,而不僅僅是內容(因為沒有尾部斜杠**"/"**)。

目標是user@server2:/dir1,考慮到**/dir1是一個符號連結,並且您正在使用該-a標誌進行存檔,您正在複製根目錄/dir1**中的符號連結,並以此結尾:

server2:/dir1/dir1

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