rsync 用符號連結替換現有目錄
在 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