在rsync中包含与其他排除在外的同名文件夹
Include folder with same name that other in exclude in rsync
所以我有这个代码:
rsync \
--archive \
--verbose \
--compress \
--delete \
--no-motd \
--exclude=.git* \
--exclude=.idea \
--exclude=.tags \
--exclude=vendor \
--exclude=tags \
--exclude=node_modules \
--rsync-path="sudo rsync" \
"${src}"/ \
"${profile}":"${dst}"
而且效果很好!但是我有一个问题......这个树结构:
.
├── app
│ ├── vendor/
├── vendor/
它不起作用。我只想排除 ./vendor
但包括 ./app/vendor
。我试过 --include
但结果是一样的: app/vendor
总是被排除在外。
有两种方法可以做到这一点:
与--include
:
rsync \
.... \
--include=app/vendor \
--exclude=vendor \
....
即将 --include
放在 之前 --exclude
更具体--exclude
:
rsync \
.... \
--exclude=/vendor \
....
即仅排除源目录根目录中的 vendor
(不要与文件系统根目录混淆)。
include/exclude 规则的基本规则是 rsync 将使用匹配任何给定文件的 first 规则。您将特定规则放在顶部,将一般规则放在底部。如果你把它们倒过来,你会发现你的特定覆盖不起作用。
所以我有这个代码:
rsync \
--archive \
--verbose \
--compress \
--delete \
--no-motd \
--exclude=.git* \
--exclude=.idea \
--exclude=.tags \
--exclude=vendor \
--exclude=tags \
--exclude=node_modules \
--rsync-path="sudo rsync" \
"${src}"/ \
"${profile}":"${dst}"
而且效果很好!但是我有一个问题......这个树结构:
.
├── app
│ ├── vendor/
├── vendor/
它不起作用。我只想排除 ./vendor
但包括 ./app/vendor
。我试过 --include
但结果是一样的: app/vendor
总是被排除在外。
有两种方法可以做到这一点:
与
--include
:rsync \ .... \ --include=app/vendor \ --exclude=vendor \ ....
即将
--include
放在 之前--exclude
更具体
--exclude
:rsync \ .... \ --exclude=/vendor \ ....
即仅排除源目录根目录中的
vendor
(不要与文件系统根目录混淆)。
include/exclude 规则的基本规则是 rsync 将使用匹配任何给定文件的 first 规则。您将特定规则放在顶部,将一般规则放在底部。如果你把它们倒过来,你会发现你的特定覆盖不起作用。