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

rsync是我的项目的一个不错的select?

我不得不 :
– 通过SSH将文件从源文件复制到目标文件夹,
– 确保所有文件都被复制,
– 复制后删除源文件。
– 如果我有冲突名称,我必须重命名文件。

它看起来像我可以使用选项: – 删除源文件(删除源文件)
但rsync如何pipe理冲突,我可以有规则吗?

用例在我的项目上:

我在服务器A上运行科学计算,结果被插入文件夹“process”中,对于每个计算,我都有一个这样的存储库:/ process / calc1。
现在我想将库“/ calc1”传输到服务器B(我得到/ process / calc1),并从服务器A中删除“calc1”。
…在另一个计算中,我得到了服务器A上的“/ process / calc2”,这个想法也是在服务器B上的“/ process /”目录中移动“calc2”,然后我现在在服务器B上:
– / process / calc1
– / process / calc2
(和/ process /在服务器A上是空的)。

如果在新计算(如果服务器B上已经存在“/ process / calc1”)之后,服务器A中有另一个文件夹如“/ process / calc1”,rsync如何pipe理冲突(在服务器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/ 

我不确定这是否是过分的,但它应该符合你的要求。

顾名思义,rsync用于同步文件。 当“同步”时,这意味着源和目标上的文件是相同的。 这看起来不像你想做的事情。

看起来你只是想移动一些文件。 你不需要使用rsync。 好像你正在使用一个Linux或BSD。 你可以在ssh上使用mv -n。 -n选项不会覆盖现有的文件。 这不是100%自动的。 但是,我不明白你的情况下文件是否已经存在。 这些文件将从源复制到目标,然后从源中删除。 你想再次运行相同的计算? 这就是为什么你最终会得到同名的文件吗? 我build议追加一个运行或批号的文件夹名称。 无论如何你都希望这一点很清楚。 你有任何控制如何命名文件夹? 更多细节? 我build议把这些命令放在一个bash脚本或类似的地方。

对于SSH,总之,使用这个:

通过远程shell访问:

Pull:rsync [OPTION …] [USER @] HOST:SRC … [DEST]

推送:rsync [OPTION …] SRC … [USER @] HOST:DEST

这一切都在rsync(1)中解释。

至于为cronjob编写脚本,通过ssh自动执行rsync而不需要密码,请查看ssh-agent(1)。