自动将文件从服务器同步到本地计算机

自动将文件从服务器同步到本地计算机

目前,我crontab每周五凌晨 3 点在我的机器上运行一项作业作为备份方法。该作业运行一个 bash 脚本,该脚本运行一个rsync命令将文件从服务器同步到我的外部硬盘驱动器。 rsync 命令使用该--include-from标志来获取要 rsync 的文件列表,例如*.cpp *.h等。

不幸的是,我的硬盘驱动器空间不足,我想用另一个具有相同存储空间的驱动器替换它。如果我继续按原样进行 rsync,我将不会获得任何东西,因为第二个驱动器将与第一个驱动器相同,并且它将已满。

理想情况下,我希望仅 rsync 比--include-from我更换外部驱动器的日期更新的文件(例如,假设我今天更换了驱动器,那么我想 rsync 我的包含文件列表中的文件更新于 2015 年 3 月 27 日)。这样,这将只是第一次驾驶的延续。

我可以在网上找到的所有内容都使用该find方法首先获取比日期更新的文件列表,然后将该列表通过管道传输到rsync.但由于这一切都发生在我的本地计算机上,我如何find从本地计算机上获取服务器上的文件列表?是否有更好的选择,也许是一个rsync检查文件上次修改日期的标志?

谢谢

答案1

使用旧磁盘进行上次备份后,创建时间戳,然后备份该时间戳之后的文件。您将使用find--newer标志来列出比时间戳更新的文件,然后使用--file-from和 标志来rsync指定要复制的文件列表。

就是这样:

步骤 1:在更换到新驱动器之前:touch /someplace/timestamp.txt

步骤2:更换新磁盘。

步骤 3:修改 cronjob 脚本以执行以下操作:

find BLAH BLAH BLAH -newer /someplace/timestamp.txt -type f -print0 >/tmp/list rsync -avP --inplace --file-from=/tmp/list --from0 desthost:/dest/place

切勿更改、触摸或修改 /someplace/timestamp.txt 文件。

答案2

大概你有 ssh 访问服务器的权限?所以

  1. 要么:授予服务器 ssh 访问本地计算机的权限,然后使用类似的内容ssh you@server 'find ... | xargs -0 -I {} rsync "{}" you@yourmachine:/media/dir'
  2. 或者:使用 在服务器上创建文件列表find,然后将此文件复制到本地计算机并从那里运行 rsync 以获取这些文件

但我不得不说我不喜欢这个。对于完整文件恢复,您仍然需要两个备份磁盘(旧的和新的),并且恢复可能会很复杂。我可以想到几种改进此策略的方法,但就您而言,最简单的方法是获得一个新的但磁盘而不是相同大小的新磁盘。当然额外的费用并没有那么大吗?

相关内容