让 rsync 将文件从源移动到目标?

use*_*782 15 linux unix rsync file-transfer

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/calc1R2”重命名“/process/calc1”?依此类推(例如:calc1R3)?

谢谢。

Pau*_*oon 11

如果您真的想使用 rsync,听起来您需要 --backup、--backup-dir 和 --suffix 的某种组合。我认为你能得到的最接近的是这样的东西

rsync -abv --suffix R1 --remove-source-files src/ dst/
Run Code Online (Sandbox Code Playgroud)

这将接近您想要的,但它不会完全按照您想要的方式重命名文件。--suffix 选项将文本附加到现有文件的末尾,但它仅针对第一次冲突执行此操作。如果您再次运行它,它只会覆盖您的第一个备份。每次运行命令时,您都必须更改该后缀值,如果您使用带有时间戳的内容,这将起作用,例如:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/
Run Code Online (Sandbox Code Playgroud)

我不确定这对于您所追求的是否太过分了,但它应该满足您的要求。