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

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

知道如何从命令行 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\夹。我不想将这些文件夹包含在存档中。

我尝试过这样的模式

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

似乎没有一个可以排除该bin\文件夹。这只是 7zip 的限制吗?

答案1

为了排除垃圾桶对象文件夹递归您可以使用以下命令:

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

你在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 中使用绝对路径,但从未成功。


更新:

Linux 的 7z 中有一个-spf使用绝对路径的选项。

根据马可-spfWindows 上从 7-zip 15.14 开始也可用

答案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>\7z.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 表示存档/无压缩。

相关内容