使用7zip进行增量备份


Answers:


11

应该很简单,使用它来创建和增量更新档案:

7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}

此页面提供有关更新选项的参考。

它们的翻译如下:

  • p0 -如果“文件存在于归档文件中,但与通配符不匹配”,则从归档文件中删除文件。
  • q3-如果“文件存在于归档文件中,但不存在于磁盘上”,则从归档文件中删除文件,并在提取时从文件系统中将其删除
  • r2 -如果“档案中不存在文件,但磁盘中存在文件”,则将文件打包到档案中。
  • x2 -如果“存档中的文件比磁盘上的文件新”,则将较旧的文件打包到存档中。
  • y2 -如果“归档文件中的文件早于磁盘上的文件”,则将较新的文件打包到归档文件中。
  • z1 -如果“归档中的文件与磁盘上的文件相同”,则重新使用文件的打包版本。
  • w2 -如果文件大小不同,则将修改后的文件打包到存档中。

您好,这许多选择意味着什么?
Zhianc

这是从文件状态到动作的映射。有七个可能的状态。
ArtemGr 2015年

3
这不是增量备份。该命令进行差异备份,并创建自上次完整备份以来的更改的新存档。增量备份跟踪自上次增量备份(diff差异)以来的更改。
stil 2016年

我认为这是完全错误的,因为它只会更新archive.7z与创建新存档几乎相同,但是会更快地重用。哈维尔(Javier)在下面的回答似乎有所不同。
调谐的

当存档较大且增量较小时,“ 更快一点 ”是相当重要的。不重新打包整个存档是增量备份的重点之一。另外,这不是差异备份:我们正在更新主存档,而不是将差异存储在单独的存档中。如果您更喜欢其他解决方案,请随意对其进行投票,还有多种方法可以给猫咪剥皮。
ArtemGr

8

如果要进行增量备份,则需要提供7-zip以及修改后的文件列表(带有-i@fileList),并且需要以某种方式详细说明该列表。在已删除问题的archive.org镜像上,通过thumbdrive进行的离线增量备份可以找到一个使用md5签名创建fileList的Unix命令行。

7-zip更新操作允许创建一个二级存档,其中包含自基础/初级存档以来的差异(包括已删除的文件)。该名称正确地称为差异备份(如问题本身所述)。

我在WPCTips的“带有7-zip的差异备份”(已存档)上找到了关于该主题的出色文章。他们建议使用GUI程序(Toucan),或在命令行中使用此配方:

7z u {base archive.7z} -u- -"up0q3r2x2y2z0w2!{differential.7z}" {folder to archive}

这与7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}ArtemGr 的建议有些不同:

  • -u- 告诉主档案不应该被修改
  • "-up0q3r2x2y2z0w2!{differential.7z}"指定目标差异归档文件,以及针对每个条件/状态对每个文件执行的操作:添加文件系统中新文件或已修改的文件,删除仅7zip归档文件中的文件,忽略其余文件。
    注意“!” bash除非使用引号,否则将截获该字符。

以防万一您对那个神秘人物的细节感到好奇 p0q3r2x2y2z0w2

<state> | State condition
p | File exists in archive, but is not matched with wildcard.   Exists, but is   not matched 
q | File exists in archive, but doesn't exist on disk.
r | File doesn't exist in archive, but exists on disk.
x | File in archive is newer than the file on disk.
y | File in archive is older than the file on disk.
z | File in archive is same as the file on disk
w | Can not be detected what file is newer (times are the same, sizes are different)

<action> | Description 
0 | Ignore file (don't create item in new archive for this file) 
1 | Copy file (copy from old archive to new) 
2 | Compress (compress file from disk to new archive) 
3 | Create Anti-item (item that will delete file or directory during extracting). This feature is supported only in 7z format. 

2
感谢您为哈维尔(Javier)提供的答案,欢迎您访问超级用户。这里有一个汇总链接以防它们消失的策略-您能解释该命令如何实现增量备份吗?(特别是up0q3r2x2y2z0w2部分!)谢谢:-)
bertieb

1
@bertieb谢谢您的建议。我希望现在更加清楚。
哈维尔2015年

1
@DanielSokolowski不确定是否可以回答您的问题。如果您执行了增量备份(A + b + c + d),则必须按制作顺序从每个存档中提取。如果您执行差异备份(A +(b + c + d))。您必须提取2个档案。最后一个档案包含有关先前档案和提取顺序的信息会很好,因此可以使用单个命令进行提取。但是我不知道这样的功能。
哈维尔

1
您分享的文章未打开@Javier
alper

1
谢谢@alper。Archive.org在web.archive.org/web/20160822111118/http://www.wpctips.com:80/…上有一些有关WPC提示的文章的快照。我想我将不得不修改答复。
哈维尔

4

您可以通过更改时间方向轻松地进行增量备份。即,您始终将最新备份保留为完整副本,并将差异文件保留到过去。

# create the difference step into the past
7z u {base archive.7z} {folder to archive} -mx=9 -u- -up1q1r3x1y1z0w1!{decrement.7z}

# update the Archive to the latest files
7z u {base archive.7z} {folder to archive} -mx=9 -up0q0x2

基本存档始终包含最新版本,并且通过逐步应用“减量”,您可以重新创建较旧的版本。通过一点点脚本,您可以将正确的编号应用于递减文件。


您能对此进行详细说明吗?我希望看到一个示例,该示例创建一个当前备份,即1天前备份,2天前备份。然后是还原“两天前”备份的示例。
Daniel Sokolowski

0

在批处理文件中,如果启用了enabledelayedexpansion,则需要引用“!”。有两个这样的^^

7z u {existing archive.7z} -u- -up0q3r2x2y2z0w2^^!{new differential.7z} {folder or files to archive}

花了我一段时间才能看到那个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.