rsync 保留目录结构,但不同步目录里的文件
最直接写法
rsync -av --exclude='dir/*' source/ dest/
说明
dir/*→ 排除目录下所有文件但 不会排除
dir/目录本身
为什么这样写?
因为 rsync 的规则是:
dir/→ 匹配目录本身dir/*→ 匹配目录里的内容
所以:
不排除
dir/只排除
dir/*
完整示例
rsync -av \
--exclude='uploads/*' \
/var/www/ \
/backup/
结果:
uploads/ ✓ 目录存在
uploads/file1 ✕ 不同步
uploads/file2 ✕ 不同步
多个目录排除
rsync -av \
--exclude='dir1/*' \
--exclude='dir2/*' \
source/ dest/
注意事项
1. 不能写成
--exclude='dir/'
这样会:
整个目录都被排除(连目录都没了)
2. 想递归子目录?
--exclude='dir/**'
区别:
| 写法 | 含义 |
|---|---|
dir/* | 只排除一层 |
dir/** | 排除所有子内容 |