知道如何从命令行7zip命令中排除通配路径吗?

我正在执行以下操作:

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


评论


对于其他所有人:如果只想忽略根目录中的文件,请使用-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

#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表示存档/不压缩。