如何使用 7-zip 备份文件,但排除某些目录

Mik*_*erg 43 backup command-line 7-zip

我想使用 7-zip 来备份目录,但我希望它排除所有名为“.svn”的目录(源树中的任何位置)。有谁知道这是否可能,在这种情况下如何?

小智 35

要排除所有 .svn 目录,您需要添加-xr!?svn\*开关

例如,以下内容将创建C:\Project\To\Backup目录的备份,不包括满足 的任何文件夹?svn

"C:\Program Files\7-Zip\7z.exe" a -r -tzip -y -xr!?svn\* Project.zip C:\Project\To\Backup\*
Run Code Online (Sandbox Code Playgroud)

  • 如果你偶然在这里寻找一般文件夹排除,请注意`?`是匹配“period-svn”(`.svn`),所以要跳过文件夹`SkipMe`中的所有内容,你将使用`-xr!SkipMe \*` (3认同)

Ric*_*ter 13

我建议使用svn export命令(使用 SlikSVN 中的svn.exe)将工作副本导出到临时文件夹,而不是使用 7-Zip 来排除 .svn(或潜在的_svn)文件夹:

svn export C:\Path\To\WC C:\Backup\Staging
Run Code Online (Sandbox Code Playgroud)

然后使用 7-Zip 如下:

7z.exe a "C:\Parth\To\Archive" "C:\Backup\Staging\*" -bd t7z -v2g -r
Run Code Online (Sandbox Code Playgroud)

然后删除暂存文件夹。

这就是我为备份本地工作副本所做的工作。


小智 12

您可以使用文件或目录列表排除带有 7zip 的文件:

/path/to7Zip/7z a -bd f:/backup/backup_2009-08-23_daily.zip home \
          '-xr@\path\to\backup_daily_exclude.lst'
Run Code Online (Sandbox Code Playgroud)

排除文件如下所示:

home\Photos\iPod*
home\dhltd\*
BlogMatrix\Sparks\db\*.archive
home\eclipse\*
.svn
Run Code Online (Sandbox Code Playgroud)

关键是 -xr,特别是“r”,它表示将排除列表递归地应用于目录的每个级别。您可能希望使用 2 个排除文件列表,一个用于绝对排除,另一个用于递归排除。以上来自在 cygwin 中运行的 bash 脚本。