7Zip - Command Line : Exclude folder(s) by wildcard pattern?
Any idea how to exclude a wild-carded path(s) from a command-line 7zip command?
I'm doing something like this:
7z.exe a -t7z archive.7z FolderToArchive\ -mx0
and would like to exclude any \bin\*.*
or \obj\*.*
folders found underneath "FolderToArchive".
To exclude files, you can use the -x
parameter. The help file gives this example for using -x
:
7z a -tzip archive.zip *.txt -x!temp.*
That's great for excluding a file. But, again, I would like to exclude a wildcard-specified folder. Under my "FolderToArchive" there are multiple folders, under those folders there may or may not be bin\
and obj\
folders. I would like to not include these in the archive.
I've tried patterns like
-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*
None seem to exclude the bin\
folder. Is this simply a limitation of 7zip?
Solution 1:
To exclude the bin and obj folders recursively you can use the command:
7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
Solution 2:
To avoid bug, use -r or -xr carefully.
suppose you have directories like:
.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src
and run the command:
7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin
what you got in archive.7z:
.\path2\src
.\path5\src
That is, the .\path2\
and .\path5\
became the top folder in archive.7z, and both bin
directories were excluded.
-x only support path/filename relative to the top folder in archive.
So, if you only want to exclude .\path1\path2\bin
, but to include all the other 'bin' directories, the command should be like this:
7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin
I tried to use absolute path in -x, but never succeed.
Update:
There is an option -spf
in 7z for Linux which works with absolute path.
According to Marco, -spf
is also available on Windows from 7-zip 15.14