rsync排除特定文件进行磁盘迁移需用--exclude或--exclude-from指定相对路径规则,如--exclude="logs"排除源目录下的logs目录,不可用绝对路径;批量排除推荐--exclude-from配合相对路径清单文件,并用-n模拟验证生效。

rsync 排除特定文件进行磁盘迁移,核心在于用好 --exclude 机制,避免把临时文件、缓存、日志等无备份价值的数据一并复制,既节省空间又提升速度。关键不是“全量拷贝”,而是“精准搬运”。
明确排除路径是相对源目录的
rsync 不认绝对路径(如 /tmp 或 /var/log),它只认你指定的源目录为根。比如你要迁移 /data/project 到新磁盘:
- 写 --exclude="logs" → 正确:排除 /data/project/logs
- 写 --exclude="/data/project/logs" → 错误:rsync 忽略该规则
- 写 --exclude="logs/*" → 排除 logs 目录下所有内容,但保留空 logs 文件夹
- 写 --exclude="logs/" 或 --exclude="logs" → 整个 logs 目录(含子目录)都不复制
批量排除推荐用 --exclude-from 文件
当要跳过几十个目录或带通配符的文件类型时,命令行堆砌 --exclude 易出错且难维护。更稳妥的做法是建一个排除清单文件,例如 exclude.list:
- 每行一个规则,用相对路径(以源目录为起点)
- 支持通配符:cache/、*.tmp、.git/、__pycache__/
- 文件本身可放在任意位置,调用时用绝对路径引用
示例命令:
rsync -aPh --delete --exclude-from=/home/user/exclude.list /data/project/ /mnt/newdisk/project/
常用需排除的典型目录和文件类型
这些内容通常不需迁移,且体积大、易变、无业务价值:
- node_modules/、vendor/(依赖包,重装即可)
- dist/、build/(构建产物,可重新生成)
- logs/、tmp/、cache/、uploads/(运行时数据)
- *.log、*.tmp、*.swp、.DS_Store
- .git/(除非你需要完整仓库历史)
验证排除是否生效的小技巧
正式迁移前先用 -n(dry-run)模拟执行,配合 -v 查看哪些会被跳过:
rsync -avn --exclude="logs" --exclude="*.tmp" /data/project/ /mnt/newdisk/project/
输出中不会出现被排除路径的文件列表,说明规则已生效。确认无误后再去掉 -n 执行真实同步。











