直接加--exclude='node_modules'即可,但需确保源路径末尾带/且排除规则用相对路径,如rsync -av --exclude='node_modules' ./project/ /backup/project/;错误写法如绝对路径或源路径不带/会导致规则失效。

直接加 --exclude='node_modules' 就行,但必须注意路径写法和斜杠细节,否则规则不生效。
排除 node_modules 的正确写法
rsync 的排除规则基于源目录的相对路径,不是绝对路径。假设你要同步当前项目目录:
-
✅ 正确(推荐):
rsync -av --exclude='node_modules' ./project/ /backup/project/
这里./project/末尾带/,表示同步 project 目录下的内容,--exclude='node_modules'就匹配project/node_modules -
❌ 错误:
--exclude='/project/node_modules'或--exclude='/node_modules'—— rsync 完全忽略这类绝对路径写法 -
⚠️ 易错: 写成
rsync -av --exclude='node_modules' ./project /backup/project(源路径不带/)→ 这时 rsync 把./project当作一个整体,排除规则会去匹配根目录下的node_modules,而不是项目内的
多个要排除的目录一起处理
除了 node_modules,通常还要跳过 .git、dist、logs 等:
- 命令行叠加:
rsync -av --exclude='node_modules' --exclude='.git' --exclude='dist' ./project/ /backup/project/ - 更清晰的做法是用
--exclude-from文件:
新建exclude.list,内容为(每行一个相对路径规则):
node_modules/<br>.git/<br>dist/<br>logs/<br>*.log
然后运行:rsync -av --exclude-from=exclude.list ./project/ /backup/project/
验证规则是否起作用
正式同步前,先用 -n(dry-run)模拟执行:
rsync -avn --exclude='node_modules' ./project/ /backup/project/- 观察输出:如果没看到
project/node_modules/下任何文件被列出,说明排除成功 - 加上
-v可以看到详细跳过信息,比如skipping: node_modules/
补充提醒
单引号包裹排除值是必须的,避免 shell 展开通配符或变量;如果路径含空格或特殊字符,也建议统一用单引号。
node_modules 排除后不会创建空目录,整个目录结构都不传过去——这正符合部署场景需求,重装依赖比同步更可靠。


















