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

Yoo*_*eek 136 command-line 7-zip

知道如何从命令行 7zip 命令中排除通配符路径吗?

我正在做这样的事情:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0
Run Code Online (Sandbox Code Playgroud)

并希望排除在“FolderToArchive”下找到的任何\bin\*.*\obj\*.*文件夹。

要排除文件,您可以使用该-x参数。帮助文件给出了这个使用示例-x

7z a -tzip archive.zip *.txt -x!temp.*
Run Code Online (Sandbox Code Playgroud)

这非常适合排除文件。但是,同样,我想排除通配符指定的文件夹。在我的“FolderToArchive”有多个文件夹,这些文件夹下有可能会或可能不会bin\obj\文件夹。我不想将这些包含在存档中。

我试过这样的模式

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*
Run Code Online (Sandbox Code Playgroud)

似乎没有排除该bin\文件夹。这仅仅是 7zip 的限制吗?

hea*_*vyd 176

要递归排除binobj文件夹,您可以使用以下命令:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
Run Code Online (Sandbox Code Playgroud)

  • 对于其他所有人:如果您只想忽略根目录中的文件,请使用 `-xr0!*.zip` - 至少我无法在没有 `r0` 的情况下使其工作。 (8认同)
  • 此外,如果这是在 Linux/Unix 命令行中,您可能需要用单引号括起来,以不添加 shell 的预处理,例如`'-x!$RECYCLE.BIN'` 以排除回收站一个外部驱动器。 (6认同)
  • -mx0 有什么用? (3认同)
  • -mx0 是什么意思,什么是!-x 后是什么意思? (2认同)
  • 具有“SETLOCAL ENABLEDELAYEDEXPANSION”的 Windows 批处理文件需要使用“^”对“!”进行转义,如“-xr^^!skip_this_dir” (2认同)

小智 21

为避免错误,请小心使用 -r 或 -xr。

假设您有以下目录:

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src
Run Code Online (Sandbox Code Playgroud)

并运行命令:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin
Run Code Online (Sandbox Code Playgroud)

你在archive.7z中得到了什么:

.\path2\src
.\path5\src
Run Code Online (Sandbox Code Playgroud)

也就是说,.\path2\.\path5\成为archive.7z 中的顶级文件夹,两个bin目录都被排除在外。

-x 仅支持对于存档中顶级文件夹的路径/文件名。

因此,如果您只想排除.\path1\path2\bin,但要包含所有其他“bin”目录,则命令应如下所示:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin
Run Code Online (Sandbox Code Playgroud)

我尝试在 -x 中使用绝对路径,但从未成功。


更新:

-spf7z 中有一个适用于 Linux的选项,可以使用绝对路径。

根据Marco 的说法,-spf也可以从 7-zip 15.14 开始在 Windows 上使用

  • 注意:至少在 Ubuntu 上,您最好将所有这些 -x 术语放在单引号 `'-x!path2\bin'` 中,以免遇到 shell 替换... ”……) (3认同)