rsync:如何在排除其他文件的同时应用递归包含过滤器

rsync: How to apply a recursively include filter while excluding other files

我正在尝试 rsync 一个文件夹,但只有一些特定的内容匹配模式并排除了剩余的文件。 我尝试了很多解决方案,遵循了 #2503 and #11111793 的建议,但我无法实现 简单 (至少在我看来)复制:/

这是我的文件夹树:

/
  - A
  - B.html
  css/
    - .gitkeep
    - source.css
    - source.min.css
    - source.min.css.map
    sub/
      - source.css
      - source.min.css
      - source.min.css.map
      - ...
  js/
    - ... Same as CSS
  img/
    - image.png
    - sub/
      - image.png
      - ...

目标是 rsync :

我尝试了很多东西,比如包含 /* 和排除 *

一个例子:

rsync -zarv \
  --include="/*.html" \
  --include="/js/**/*/min.js" \
  --include="/js/**/*.min.js.map" \
  --include="/css/**/*.min.css" \
  --include="/css/**/*.min.css.map" \
  --include="/img/***" \
  --exclude="*" \
  --delete \
  ./ $to

3 星帮助我创建了 img/ 文件夹,并复制了其中的所有内容,包括子文件夹;它不适用于 /img/*/img/**/*(没有同步文件,甚至 img 文件夹本身也不同步)。

我不明白...我不明白的-.-'

有人可以帮我吗?

附属问题:glob 模式 /js/**/*.min.* 似乎不起作用,我们可以只在路径开头使用通配符吗?

谢谢!

首先尝试包括文件夹本身:

rsync -zarv \
  --include="/*.html" \
  --include="/js/" \
  --include="/js/**/" \
  --include="/js/**.min.js" \
  --include="/js/**.min.js" \
  --include="/js/**.min.js.map" \
  --include="/css/" \
  --include="/css/**/" \
  --include="/css/**.min.css" \
  --include="/css/**.min.css.map" \
  --include="/img/***" \
  --exclude="*" \
  --delete \
  ./ "$to"/