知道如何从命令行 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
使用绝对路径的选项。
根据马可,-spf
Windows 上从 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 表示存档/无压缩。