7Zip-命令行:通过通配符模式排除文件夹?


107

任何想法如何从命令行7zip命令中排除通配路径?

我正在做这样的事情:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

并想排除任何\bin\*.*\obj\*.*发现“FolderToArchive”下的文件夹。

要排除文件,可以使用-x参数。帮助文件给出了使用以下示例-x

7z a -tzip archive.zip *.txt -x!temp.*

这对于排除文件非常有用。但是,再次,我想排除通配符指定的文件夹。在我的“FolderToArchive”有多个文件夹,这些文件夹下有可能会或可能不会bin\obj\文件夹。我不想在存档中包含这些内容。

我尝试过像

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

似乎没有人排除该bin\文件夹。这仅仅是7zip的限制吗?

Answers:


131

要递归排除binobj文件夹,可以使用以下命令:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj

5
对于其他所有人:如果只想忽略根目录中的文件,请使用-xr0!*.zip-至少在没有的情况下我无法使它正常工作r0
奥利弗

6
另外,如果在Linux / Unix命令行中,则可能需要用单引号引起来,而不是通过Shell添加预处理,例如'-x!$RECYCLE.BIN',排除外部驱动器的回收站。
thanosa75 '17

15

为避免错误,请小心使用-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

您在archive.7z中获得的内容:

.\path2\src
.\path5\src

也就是说,.\path2\.\path5\成为archive.7z中的顶级文件夹,并且两个bin目录都被排除在外。

-x仅支持对于归档顶部文件夹的路径/文件名。

因此,如果您只想排除.\path1\path2\bin,但要包括所有其他“ bin”目录,则命令应如下所示:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

我试图在-x中使用绝对路径,但从未成功。


更新:

-spfLinux的7z中有一个可以使用绝对路径的选项。

根据Marco的说法,-spfWindows 7 zip 15.14上也提供该功能。


2
注意:至少在Ubuntu上,最好将所有这些-x术语放在单引号中'-x!path2\bin',以免被shell替换...(让您花更长的时间,语法上不正确的“命令” ...)
Frank Nocke

要引用@FrankNocke的注释,您也可以在Windows上执行此操作,以允许文件夹名称中包含点:'-xr!\.foo'
DonBecker
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.