脚本中Rsync同步排除规则怎么写

wen 实用脚本 2

本文目录导读:

脚本中Rsync同步排除规则怎么写

  1. 使用 --exclude 参数(最简单常用)
  2. 使用 --exclude-from 参数(推荐,维护方便)
  3. 高级排除技巧
  4. 实际脚本示例

在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 先测试排除效果

抱歉,评论功能暂时关闭!