使用批处理/ shell脚本对目录进行增量备份

时间:2010-09-16 15:57:02

标签: shell batch-file backup

我正在尝试创建一个自动备份完整目录树的脚本。我也希望它能用于增量备份。基本上,它会像这样工作:

  • 如果文件同时位于源和目标中且它们不同,则将复制源文件
  • 如果文件同时位于源和目标中并且它们相同,则不会复制任何内容
  • 如果文件仅在源中,则将复制源文件
  • 如果文件仅在目标中,则将删除目标文件。

我还是shell脚本的新手,我不知道如何实现它。有任何想法吗? Windows批处理脚本会更好,但在Cygwin上运行的shell脚本也可以。

2 个答案:

答案 0 :(得分:4)

查看rsync工具 - 它旨在最大限度地减少文件同步期间的流量。

此外,可能带有“-u”参数的“cp”将非常有用:

  

-u, - 更新

copy only when the SOURCE file is newer than the destination file or when the destination file is missing

答案 1 :(得分:0)

对于Windows批处理脚本xcopy(Windows原生)或robocopy(在Windows中免费下载)都可以很好地工作。

示例xcopy脚本(在.bat文件中):

@echo off
:: /L = list only.
:: /v=Verify, /y=No prompting /s=subdirs /z=Network mode (supports bad)
:: /i=Tells xcopy dest is folder /f=Display names /d=Copy only changed

echo Backing up projects...
xcopy e:\projects h:\projects /V /Y /S /Z /I /F /D

它甚至会支持孤立的文件(如果您从源中删除了某些内容,则不再需要备份中的副本)。 Xcopy通常可以满足您的需求,直到您处理NTFS和Fat32文件系统之间的同步 - 后者只有2秒的分辨率和每日节省时间的问题,因此您偶尔会遇到问题:(a)按时更改那天你可能无法获得已更改文件的备份 - 当然取决于更改 - 规则性,或者你可能会获得所有文件的备份,即使没有更改(b)因为时间分辨率,某些文件可能会备份,即使它们没有改变。