本文目录导读:

在Rsync脚本中编写排除规则,主要有两种方式:
使用 --exclude 参数(最简单常用)
排除单个文件/文件夹
# 排除单个文件夹 rsync -avz --exclude='node_modules' /source/ /destination/ # 排除单个文件 rsync -avz --exclude='config.php' /source/ /destination/
排除多个项目
rsync -avz \ --exclude='node_modules' \ --exclude='.git' \ --exclude='*.log' \ --exclude='temp/' \ /source/ /destination/
使用 --exclude-from 参数(推荐,维护方便)
创建一个排除规则文件 exclude-list.txt:
# 注释以 # 开头 node_modules/ .git/ .cache/ *.log temp/ *.tmp .DS_Store Thumbs.db # 可以使用通配符 dist/*.map upload/private/
脚本中使用:
rsync -avz --exclude-from='exclude-list.txt' /source/ /destination/
高级排除技巧
路径模式匹配
# 排除根目录下的某个文件夹(以 / 开头) --exclude='/data' # 只排除 source/data/ --exclude='data' # 排除所有 data 文件夹 # 排除特定深度的文件 --exclude='*/cache/' # 排除任何层级的 cache 文件夹 --exclude='/var/log/*' # 精确路径匹配
包含和排除组合
# 先排除所有,再包含特定文件 rsync -avz \ --exclude='*' \ --include='*/' \ --include='*.html' \ --exclude='*' \ /source/ /destination/
实际脚本示例
#!/bin/bash
# 备份脚本
SOURCE="/var/www/project/"
DEST="/backup/project/"
EXCLUDE="--exclude={node_modules,.git,*.log,cache,temp}"
# 方法1:行内排除
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.git' \
--exclude='*.log' \
--exclude='cache' \
--exclude='temp' \
"$SOURCE" "$DEST"
# 方法2:使用排除文件
rsync -avz --delete \
--exclude-from='/path/to/exclude-list.txt' \
"$SOURCE" "$DEST"
| 语法 | 含义 |
|---|---|
'node_modules/' |
排除文件夹(注意末尾斜杠) |
'*.log' |
排除所有.log文件 |
'/.git' |
排除根目录下的.git |
'*/cache/' |
排除所有层级的cache文件夹 |
'file.txt' |
排除名为file.txt的文件 |
最佳实践:
- 使用
--exclude-from将规则写在单独文件中 - 规则文件支持 注释
- 路径末尾 只匹配目录
- 使用
--dry-run先测试排除效果