我正在执行以下操作:
7z.exe a -t7z archive.7z FolderToArchive\ -mx0
,并希望排除在“ FolderToArchive”下找到的任何
\bin\*.*
或\obj\*.*
文件夹。要排除文件,可以使用
-x
参数。帮助文件给出了使用-x
的示例:7z a -tzip archive.zip *.txt -x!temp.*
排除文件非常有用。但是,再次,我想排除通配符指定的文件夹。在我的“ FolderToArchive”下有多个文件夹,在这些文件夹下可能有也可能没有
bin\
和obj\
文件夹。我不想在归档文件中包含这些文件。这仅仅是7zip的限制吗?#1 楼
要递归排除bin和obj文件夹,可以使用以下命令:7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
#2 楼
为避免错误,请谨慎使用-r或-xr。假定您具有以下目录:
.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src
并运行命令:
7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin
存档中的内容。7z:
.\path2\src
.\path5\src
也就是说,
.\path2\
和.\path5\
成为顶部7z中的文件夹,两个bin
目录都被排除。-x仅支持相对于存档中顶部文件夹的路径/文件名。
因此,如果您只想排除
.\path1\path2\bin
,但包括所有其他“ bin”目录,命令应如下所示:7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin
我试图在-x中使用绝对路径,但是永远不会成功。
更新:
在Linux的7z中有一个选项
-spf
,它可以使用绝对路径。Marco,
-spf
也可从7-zip 15.14开始在Windows上使用。评论
注意:至少在Ubuntu上,最好将所有这些-x术语放在单引号'-x!path2 \ bin'中,以免被shell替换...(使您的语法更长,语法上不正确。 ..)
–弗兰克·诺克(Frank Nocke)
17年9月18日在8:45
要引用@FrankNocke的注释,您也可以在Windows上执行此操作,以允许文件夹名称中包含点:'-xr!\。foo'
– DonBecker
18年5月11日在18:06
#3 楼
基于@zhazha的答案,并更清楚地了解如何准确排除子文件夹。在Windows 10上,备份Visual Studio解决方案根文件夹:D:\VS2019\Sln1
然后:
//goto the parent of the root folder first which make thing clearer
//not sure what will happen if you go into the root folder
cd D:\VS2019
"<path-of-7z>z.exe" a -tzip -mx0 Sln1_backup.zip Sln1 -x!Sln1\.vs -x!Sln1\Debug -x!Sln1\Release -x!Sln1\lib -x!Sln1\Project1\x64 -x!Sln1\Project2\obj
然后您可以确保仅排除指定的子文件夹,例如,不会无意中排除Sln1 \ Project3 \ obj或Sln1 \ Project4 \ lib。适用于隐藏的巨大.vs文件夹。
-mx0表示存档/不压缩。
评论
对于其他所有人:如果只想忽略根目录中的文件,请使用-xr0!*。zip-至少在没有r0的情况下,我无法使其正常工作。
–奥利弗
13年2月23日在9:46
另外,如果这是在Linux / Unix命令行中,则可能需要用单引号引起来,而不要通过shell添加预处理,例如'-x!$ RECYCLE.BIN'排除外部驱动器的回收站。
–thanosa75
17-4-3在11:29
-mx0有什么用?
– Gerfried
19-10-30在17:12
-mx0是什么意思,什么是! -x之后是什么意思?
–UbuntuForumsStaffAreTrolls
20 Mar 23 '20 at 17:42