Linux

讓 rsync 將文件從源移動到目標?

  • October 20, 2010

rsync 對我的項目來說是一個不錯的選擇嗎?

我必須:

  • 通過 SSH 將文件從源文件夾複製到目標文件夾,

  • 確保所有文件都已複製,

  • 複製後刪除源文件。

  • 如果我有衝突名稱,我必須重命名文件。

看起來我可以使用選項:–remove-source-files(刪除源文件)

但是 rsync 如何管理衝突,我可以有規則嗎?

我的項目案例:

我在伺服器 A 上執行科學計算,並將結果插入文件夾“程序”中,對於每個計算,我都有一個這樣的儲存庫:/process/calc1.

現在我想將儲存庫“/calc1”傳輸到伺服器 B(我得到 /process/calc1),並從伺服器 A 中刪除“calc1”

。…在另一個計算過程中,我在伺服器 A 上得到“/process/calc2”,這個想法也是在伺服器 B 上的“/process/”目錄中移動“calc2”,然後我現在在伺服器 B 上:

  • /process/calc1

  • /process/calc2

(並且伺服器 A 上的 /process/ 為空)。

如果在新計算後伺服器 A 中有另一個文件夾,例如“/process/calc1”(如果伺服器 B 上已經存在“/process/calc1”),rsync 將如何管理衝突(在伺服器 B 上)?

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

謝謝。

如果你真的想使用 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/

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

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