使用 chown 選項時,rsync 未設置新創建的父目錄的所有權
我想從一個系統中同步一個子目錄,並將其放在遠端主機上同一父目錄(不存在)中的遠端主機上。如果我使用 rsync 作為 root 並指定 chown 子目錄所有權在遠端系統上是正確的,但新創建的父目錄不正確,則父目錄最終是 root 擁有的。由於某些違反 ssh 安全規則的權限問題(不允許我使用遠端主機上的目標帳戶的密鑰),我必須以 root 身份執行此操作。
例子:
系統A:
- bob123:bob123 755 - /home/bob123/configurations/
- bob123:bob123 755 - /home/bob123/configurations/app1/
- bob123:bob123 755 - /home/bob123/configurations/app2/
- …
系統 B:
- bob123:bob123 755 - /home/bob123/ (這個目錄是空的)
作為系統 A 上的根使用者:
rsync --chown=bob123:bob123 -IHrlptD /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
結果是:
- 根:根755 - /home/bob123/configurations
- bob123:bob123 755 - /home/bob123/configurations/app4
我嘗試了不同的選項,但還沒有找到一個有效的選項,並且在目錄樹所有權和權限正確(由 bob123:bob123 擁有)
system-b:/home/bob123/configurations
時始終由 root 擁有。app4
如果迫不得已,我可以使用 ssh 來執行 mkdir,但想知道是否可以只使用 rsync 來做我想做的事。
更新:不確定是否重要,但係統是使用 rsync 3.1.2 和 OpenSSH_7.6p1 的 Ubuntu 18.04。
############ 解決方案: ############
謝謝@roaima 的幫助!
該
-R
選項/./
是缺少的選項。我還必須包括-go
選項。我最終得到了以下內容:
rsync --chown=bob321:bob321 -IHazR /home/bob123/./configurations/app4 system-b:/home/bob321/
如果兩個系統上都存在相同的使用者,我不必使用
--chown
,但對於具有不同程序所有者的遠端系統,它是。上面的例子是利用 chown 來反映不同的用法。在我的腳本中,chown 選項設置取決於遠端主機地址。再次感謝@roaima 為我指明了正確的方向
-R
!
您的命令(此處簡化)不包含
configurations
在要傳輸的目錄列表中,因此傳輸規則如chown
不適用rsync -a /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
鑑於
/home/bob123
目標上已經存在,rsync
將創建一個進一步的目錄來匹配目標/home/bob123/configurations
。然後它將源app4
文件或目錄樹複製到新創建的目標目錄中。如果要
configurations
包含在傳輸目錄列表中,可以使用-R
(--recursive
) 標誌並將源configurations
目錄包含在傳輸樹中rsync --chown=bob123:bob123 -IHrlptDR /home/bob123/./configurations/app4 system-b:/home/bob123/
處理此問題的另一種方法是登錄為
bob123
onsystem-b
,以便目標使用者隱式擁有所有內容:rsync -Ia /home/bob123/configurations/app4 bob123@system-b:configurations/
PS你真的想要
-I
(--ignore-times
)?除非你確定你需要這個標誌,否則不要使用它。