Linux中用tar排除多个子目录需反复使用--exclude参数或--exclude-from从文件读取;路径须匹配相对结构且不可加斜杠/,如tar -czvf backup.tar.gz --exclude=logs --exclude=cache ./project。

Linux 中用 tar 排除多个不同子目录,核心是反复使用 --exclude 参数,或改用 --exclude-from 从文件批量读取路径。关键在于路径写法必须匹配 tar 扫描时的相对结构,且不能在目录名后加斜杠 /。
直接多次使用 --exclude
这是最常用、最直观的方式。每个要排除的子目录单独写一个 --exclude='目录名',顺序不限,全部放在 tar 命令末尾(打包源路径之前或之后都可,但推荐放在源路径前,更符合习惯)。
- 排除当前目录下的
logs和cache子目录:tar -czvf backup.tar.gz --exclude=logs --exclude=cache ./project - 排除嵌套路径,比如
project/src/node_modules和project/dist:tar -czvf project.tar.gz --exclude='src/node_modules' --exclude=dist ./project - 注意:写
node_modules就够了,不要写成node_modules/或./node_modules—— 加/会导致排除失效
用 --exclude-from 从文件统一管理
当要排除的目录较多、或需复用规则时,把路径写进文本文件更清晰可靠。每行一条路径,支持相对路径写法。
- 先创建排除列表:
cat > exclude.list node_modules<br>.git<br>tmp<br>build/<br>*.log<br>EOF
- 执行打包:
tar -czvf app.tar.gz --exclude-from=exclude.list ./app - 注意:如果
exclude.list里写了build/(带斜杠),它仍会被忽略——因为--exclude-from对结尾斜杠不敏感;但为统一风格,建议所有条目都不加/
按模式批量排除同类目录
利用通配符可一次排除多个名称相似的目录,比如所有缓存目录或隐藏目录。
- 排除所有名为
cache的目录(无论在哪一级):tar -czvf site.tar.gz --exclude='*/cache' ./site - 排除所有隐藏目录和文件(以点开头):
tar -czvf home.tar.gz --exclude='.*' /home/user - 排除某一层级下所有临时目录:
tar -czvf src.tar.gz --exclude='src/*/temp' --exclude='src/*/tmp' ./src
验证是否排除成功
打包后别急着上传,先快速检查归档内容是否符合预期。
- 列出压缩包内文件:
tar -tzf backup.tar.gz | head -20 - 搜索是否还包含被排除的目录名:
tar -tzf backup.tar.gz | grep -E '(logs|cache|node_modules)' - 若发现漏排,重点检查:路径是否拼错、是否多写了
/、是否忘了切换到正确工作目录











