讓 rsync 將檔案從來源移動到目標?

讓 rsync 將檔案從來源移動到目標?

rsync 對於我的專案來說是一個不錯的選擇嗎?

我必須:
- 透過 SSH 將文件從來源資料夾複製到目標資料夾,
- 確保複製所有文件,
- 複製後刪除來源文件。
- 如果我有衝突名稱,我必須重新命名檔案。

看起來我可以使用選項:--remove-source-files(刪除原始檔)
但是rsync如何管理衝突,我可以有規則嗎?

我的專案中的用例:

我在伺服器 A 上運行科學計算,結果插入到資料夾「process」中,對於每個計算,我都有一個像這樣的儲存庫:/process/calc1。
現在我想將儲存庫「/calc1」傳輸到伺服器B(我得到/process/calc1),並從伺服器A刪除「calc1」。...
在另一次計算期間,我在伺服器A上得到「/process /calc2”,這個想法也是將“calc2”移到伺服器B上的“/process/”目錄中,然後我現在在伺服器B上:
- /process/calc1
- /process/calc2
(伺服器A上的/process /是空的)。

如果在新計算後伺服器 A 中有另一個資料夾(如「/process/calc1」)(如果伺服器 B 上已存在「/process/calc1」),rsync 將如何管理衝突(在伺服器 B 上)?

是否可以使用 rsync 新增規則,並在伺服器 B 中將“/process/calc1”重新命名為“process/calc1R2”?等等(例如:calc1R3)?

謝謝。

答案1

如果你真的想使用 rsync,聽起來你需要 --backup、--backup-dir 和 --suffix 的某種組合。我認為你能得到的最接近的東西是這樣的東西

rsync -abv --suffix R1 --remove-source-files src/ dst/

這將接近您想要的,但它不會完全按照您想要的方式重命名檔案。 --suffix 選項將文字附加到現有文件的末尾,但它僅在第一次衝突時執行此操作。如果您再次運行它,它只會覆蓋您的第一個備份。每次執行命令時,您都必須更改該後綴值,如果您使用帶有時間戳記的內容,這將起作用,例如:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

我不確定這對於您所追求的目標是否太過分了,但它應該滿足您的要求。

答案2

顧名思義,rsync 用於同步檔案。當「同步」時,這表示來源和目標上的檔案是相同的。這似乎不是您想要做的。

看起來您只想移動一些文件。您不需要為此使用 rsync。看來您使用的是 linux 或 BSD。您可以透過 ssh 使用 mv -n 。 -n 選項不會覆蓋現有檔案。這不是 100% 自動的。但是,我不明白該文件如何在您的情況下已經存在。文件將從來源複製到目標,然後從來源中刪除。您想再次運行相同的計算嗎?這就是為什麼你最終會得到同名檔案的原因嗎?我建議在資料夾名稱中附加運行號或批號。無論如何你都希望這一點是清楚的。您可以控制資料夾的命名方式嗎?還有更多細節嗎?我建議將命令放入 bash 腳本或類似腳本中。

答案3

對於 SSH,總而言之,使用以下命令:

透過遠端 shell 存取:

拉取:rsync [選項...] [USER@]HOST:SRC... [目標]

推播:rsync [選項...] SRC... [USER@]HOST:DEST

rsync(1) 中對此進行了全部解釋。

至於為 cronjob 編寫腳本,透過 ssh 自動進行 rsync 而無需密碼,也請查看 ssh-agent(1)。

相關內容