使用bash和rsync进行备份

有没有办法自动重命名接收器上的现有文件? 例如:如果filename已经存在,它会自动重命名filename_001filename_002等….

到目前为止,我所拥有的是这样的:

 $ rsync -rh --progress --stats --exclude '.thumb' \ --update --perms /origin /destination 

顺便说一句,我知道rsync已经--ignore-existing “跳过更新接收器上存在的文件”,但我想我需要的东西就像--rename-existing

如果您希望保持数据集的增量版本(不使用版本控制, 例如gitbuild议(这将成为另一种替代方法)),请考虑使用rsnap而不是rsync

它将允许您拍摄一个文件夹或一组文件的快照,以便您可以恢复在任何给定时间点的整个事件。 而不是保存整个文件的多个副本,它应该只保存它们之间的差异,节省了所有这些副本的空间。

由于它使用rsync在后台复制文件,因此可以将rsync选项附加到该命令的末尾。 例如在你的情况下保留十个备份副本,你可以做这样的事情:

 $ rsnap 10 /origin /destination -- --progress --stats \ --exclude '.thumb' --update --perms 

--backup--suffix选项(至less在v3.0.8中),但他们不完成你想要的,因为 – suffix是固定的,而不是自动递增( cp有一个很好的自动递增备份后缀选项)。 我能想到的最好的方法是使用datetimestamp作为后缀,如下所示:

 SUFFIX=`date '+%Y-%m-%d-%H:%M:%S'` rsync -rh --progress --stats --exclude '.thumb' \ --backup --suffix="$SUFFIX" \ --update --perms /origin /destination 

我也会考虑使用git这是一个开源的版本控制软件。 有一点点的学习曲线,但它听起来像适合你想要做的。 它也使用ssh,ftp和其他一些传输协议。 一个很好的工具,用于镜像存储库,跟踪更改等。如果您遇到困难 ,它还有很棒的文档和一个非常活跃的irc频道( webchat.freenode.net#git )。

祝你好运!