rsync 僅同步檔案而不在目標上建立資料夾

rsync 僅同步檔案而不在目標上建立資料夾

rsync 是否可以不在目標上建立目錄?

想像一下我有這個來源:

a/
a/x.txt
b/
b/y.txt

我有這個目的地:

a/
a/z.txt

想要的結果rsync source destination

a/
a/x.txt
a/z.txt

當然,我的真實情況涉及數千個文件/資料夾結構,我不想要涉及同步資料夾的明確列表的解決方案,這是我可以做到的。我正在尋找一種乾淨的方法來防止在目標上建立任何資料夾。透過排除或過濾...這甚至可能是 rsync 之外的東西,例如如果 rsync 無法做到這一點,則具有權限的駭客...


作為訊息,這種情況很容易發生,就我而言,我有:

  • 一台有 2 個磁碟的伺服器,比方說A& B。還有本機驅動器C
  • 我通常使用rsync同步(和合併)遠端A&B到本地C
  • 有時我只想將一些C文件同步回AB。 (只是新文件...而不是目標上不存在的資料夾)

答案1

請嘗試以下操作:

rsync -av src:/dir/to/files/* /dest/dir

如果您有多個巢狀子目錄,則需要先執行下列操作:

find /dir/to/files -type d -print

透過循環運行該目錄列表並每次調用 rsync。當然,假設您在遠端電腦上執行此操作,則需要透過 ssh 發出查找並將結果儲存在陣列中,然後執行 rsync 循環。

答案2

我現在為 rsync 實現了這個,並將補丁提交給上游: https://lists.samba.org/archive/rsync/2015-November/030455.html

答案3

也許進行正常的 rsync,然後在第二步中刪除所有新建立的資料夾......聽起來很危險。

為了提高此操作的安全性,您可以使用目標系統上的另一個使用者:

rsync $src $specialuser@server:$destination

刪除該使用者遠端建立的資料夾:

ssh $normalUser@destination "find $destination -type d -user $specialuser -exec rm -r {} \;"

然後將權限設定回正常:

ssh $normalUser@destination "chown -R $defaultUser:$defaultGroup $destination"

該死,這看起來很髒......這需要一些重大改進:D

答案4

我建議使用腳本在目標上建立一個 include_file 文件,將 a 附加/*到結果的每一行:

尋找 [target_dir] -type d >[target_dir]/include.file

然後,您可以使用 rsync 來--include_file=[target_dir]/include.file指定僅包含與該檔案中的模式相符的檔案—這應該是目標上您指定的點下的資料夾的完整清單。

如果您每次都建立腳本來執行此操作,則 include.file 中的清單將始終是最新的。否則,您可能決定偶爾刷新它們(您想要重新同步回的每台伺服器上都有一個)。

如果我稍後有時間,我會在這裡發布一個可用的 python 腳本,但這應該會給你一個很好的道路。

相關內容