7-Zip支持多种排除文件/目录的方法:一、用-xr!递归排除子目录;二、用-x!排除顶层文件;三、用通配符如-xr!.*排除隐藏目录;四、用-xr@file.txt引用外部排除列表;五、Linux/macOS中需单引号或反斜杠转义!。

如果您使用7-Zip对目录进行压缩,但希望跳过某些特定文件或文件夹(如 node_modules、.svn、*.log 等),则需借助命令行参数精准控制排除行为。以下是多种可行的操作方法:
一、使用 -xr! 参数递归排除指定文件夹
该方法适用于排除整个子目录及其所有内容,-xr! 中的 r 表示递归匹配,! 后接通配路径,从被压缩目标目录为根路径进行匹配。
1、打开命令提示符(Windows)或终端(Linux/macOS),确保 7z 命令已加入系统 PATH。
2、执行如下命令压缩当前目录 ./project,同时排除 project/node_modules 和 project/temp:
7z a -t7z archive.7z ./project '-xr!node_modules' '-xr!temp'
3、若路径含空格或特殊字符,需用双引号包裹整个路径参数,例如:'-xr!"build output"'
二、使用 -x! 参数排除单个或多个特定文件
此方式不递归子目录,仅在压缩目标的顶层匹配文件名;若需跨层级排除同名文件,应改用 -xr! 或通配符组合。
1、压缩 ./src 目录,排除顶层的 config.local.js 和 README.md:
7z a -t7z src.7z ./src -x!config.local.js -x!README.md
2、排除所有 .tmp 后缀的文件(注意:-x! 不默认递归,需配合 -r 或改用 -xr!):
7z a -t7z src.7z ./src '-xr!*.tmp'
三、通过通配符灵活排除多类文件或深层目录
7-Zip 支持 *(任意长度字符)和 ?(单个字符)通配符,结合 -xr! 可实现模式化排除,例如排除所有隐藏目录、日志文件或临时构建产物。
1、排除所有以点开头的目录(如 .git、.idea、.vscode):
7z a -t7z full.7z ./app '-xr!.*'
2、排除任意层级下的 __pycache__ 和 *.pyc 文件:
7z a -t7z code.7z ./code '-xr!__pycache__' '-xr!*.pyc'
3、排除路径中包含 build/ 的所有子目录(无论嵌套多深):
7z a -t7z dist.7z ./project '-xr!*build*'
四、利用外部排除列表文件批量指定排除项
当排除项较多或路径复杂时,可将待排除的路径逐行写入文本文件,再通过 @ 引用,避免命令过长或转义错误。
1、新建纯文本文件 exclude.txt,内容如下(每行一个排除路径,不加引号):
node_modules/
dist/
logs/*.log
.DS_Store
2、执行命令调用该列表:
7z a -t7z release.7z ./source -xr@exclude.txt
3、注意:文件路径须相对于压缩源目录;若 exclude.txt 与命令执行路径不同,需提供其完整或相对路径,如 -xr@./conf/exclude.txt
五、Linux/macOS 下处理感叹号 ! 的 Shell 转义问题
在 Bash 或 Zsh 中,! 是历史扩展字符,直接使用会导致命令解析失败;必须通过单引号包裹或反斜杠转义,否则排除规则无效。
1、正确写法(推荐单引号):
7z a -t7z backup.7z /home/user/project '-xr!node_modules' '-xr!.git'
2、等效写法(反斜杠转义):
7z a -t7z backup.7z /home/user/project -xr\!node_modules -xr\!.git
3、错误写法(未转义,Shell 尝试执行历史命令):
7z a -t7z backup.7z /home/user/project -xr!node_modules

















