我知道这个问题以前也曾被问过。我看过答案,但没有一个对我有用。
在 Windows 上运行,使用 PowerShell。
// Arguments are on separated by newlines only for clarity in this question.
7z.exe u -r -up0q0r2x2y2z1w2 -ms=off -ssw -xr!dir1 -xr!dir1\ -xr!\dir1\* -xr!*\dir1 -xr!Dir3\Dir4\* -xr!Dir5\*IgnoredDirs archive.7z Dir0\*
这就是说
-xr!dir1 // Various Syntaxes testing ignoreing dir1
-xr!dir1\
-xr!dir1\*
-xr!*\dir1
-xr!Dir2\Dir3\* // Ignore Dir3 only under Dir2
-xr!Dir5\*IgnoredDirs // Ignore Dirs ending in IgnoredDirs only under Dir5
似乎没有一个能起到作用。
我也尝试过使用命令a
或u
。
提前致谢!
ps 7zip 命令行参数很糟糕。
答案1
好的,我想我已经明白了。
使用7z u -xr!itemName archive.zip source\*
注意:将在档案的根目录中source\*
包含内容。或者将在档案的根目录中包含源。source
source\
source
itemName // ignore all files or folders named itemName in source or a sub-Folder.
itemName\ // ignore all folders, but not files, named itemName in source or sub-folder.
itemName\* // ignore all files in folders named itemName, but include the folder (it will be empty) in source or sub-folder.
如果您只想忽略特定文件夹中的文件夹,语法会略有变化。您必须itemName
在*\
*\item1Name\item2Name\ // ignore all files and folders in folder item2Name in folders named item1Name
// i.e. ignore all files in folders in any path ending with the folder and sub-folder combination item1Name\item2Name
*\item1Name\*\item2Name\ // ignore all files in someFolder\item1Name\someFolder\item2Name
*\item1Name\**\item2Name\ // same as *\item1Name\*\item2Name\
假设以下目录/文件布局。(布局是使用 cmd.exe shell 中的 tree 命令生成的)
dir0
| File 1-1.txt
| File 1-2.txt
| File Same Name In Multiple Folders.txt
|
+---dir1
+---dir2
| | File 2-1.txt
| | File 2-2.txt
| | File Same Name In Multiple Folders.txt
| |
| \---dir3
| File 3-1.txt
| File 3-2.txt
| File Same Name In Multiple Folders.txt
|
\---dir5
| File 5-1.txt
| File 5-2.txt
| File Same Name In Multiple Folders.txt
|
+---dir6-IgnoreDirs
| File 6-1.txt
| File 6-2.txt
| File Same Name In Multiple Folders.txt
|
\---dir7-IgnoreDirs
File 7-1.txt
File 7-2.txt
File Same Name In Multiple Folders.txt
我的问题的答案是
// File Contents of exclude
// below assumes using -xr
dir1\ // Ignore any folder named dir1
*\Dir2\Dir3\ // Ignore Dir3 under any folder named Dir2
*\Dir5\*IgnoredDirs\ // Ignore Dirs ending in IgnoredDirs under any Dir5
// Command Line
7z u archive.zip dir0\* -xr@exclude
// Command Line for mirroring
7z u archive.zip dir0\* -up0q0r2x2y2z1w2 -ms=off -ssw -xr@exclude
最后,添加-r
到命令行将表现得好像排除的项目在每个子文件夹级别都经过评估。含义7z archive.zip dir0\* -r -xr!Dir1\
将被包含,因为其内容将因 -r 选项而包含在内。
希望这对你有帮助。-DF5