📌 背景规则
rsync 的匹配逻辑是:
- 
                                遍历目录时,如果某个目录被排除了,它下面的文件/目录就不会再被扫描。 
- 
                                所以如果你只写 --include='uploads/***',但没有告诉 rsync 要“保留进入 uploads 目录”,那 rsync 可能根本不会进入这个目录。
- 
                                因此要写两个 include: - --include='uploads/'→ 允许进入- uploads目录本身
- --include='uploads/***'→ 允许- uploads目录下的所有内容
 
✅ --include 推荐写法
                        如果是“排除其它,只保留 uploads”,写法通常是:
rsync -av --delete \
   --include 'uploads/' \
   --include='uploads/***' \
   --exclude='*'
   --dry-run \
   /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/ \
   /mnt/hgfs/e/phpstudy_pro/WWW/project/🚀 意思是:
- 允许 uploads/目录和里面的所有内容
- 其他一律排除
✅ --exclude 推荐写法
                        如果你想完全排除 .git,推荐写法:
rsync -av --delete \
    --exclude '.git/' \
    --dry-run \
    /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/ \
    /mnt/hgfs/e/phpstudy_pro/WWW/project/🚀 这样 rsync 会直接忽略整个 .git 目录。
✅ 排除指定后缀文件
--exclude '*.dev.php'
🚀 这个规则会匹配 任意目录层级 下的 *.dev.php 文件。
也就是说:
- /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/a.dev.php❌ 不会同步
- /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/b/a.dev.php❌ 不会同步
- /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/b/c/d/a.dev.php❌ 不会同步
只要文件名以 .dev.php 结尾,无论在多少层目录里,都会被排除。
rsync -av --delete \
    --exclude '.git/' \
    --exclude '.idea/' \
    --exclude 'softs/' \
    --exclude 'docs/' \
    --exclude 'uploads/' \
    --exclude '*.dev.php' \
    --dry-run \
    /mnt/hgfs/e/phpstudy_pro/WWW/project_dev/ \
    /mnt/hgfs/e/phpstudy_pro/WWW/project/