使用 7z.exe 时,使用排除参数排除特定目录中的目录的正确方法是什么

使用 7z.exe 时,使用排除参数排除特定目录中的目录的正确方法是什么

我知道这个问题以前也曾被问过。我看过答案,但没有一个对我有用。

在 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

似乎没有一个能起到作用。

我也尝试过使用命令au

提前致谢!

ps 7zip 命令行参数很糟糕。

答案1

好的,我想我已经明白了。

使用7z u -xr!itemName archive.zip source\* 注意:将在档案的根目录中source\*包含内容。或者将在档案的根目录中包含源。sourcesource\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

相关内容