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



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

这是我的文件夹树:

/
- 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:

  • /*.html根目录下的所有HTML文件(没有其他文件类型(
  • /css/**/*.min.css递归地将所有构建的文件放入/css和子文件夹
  • /css/**/*.min.css.map所有递归映射到/css和子文件夹的文件
  • /js/**/*.min.js递归地将所有构建的文件放入/js和子文件夹
  • /js/**/*.min.js.map所有递归映射到/js和子文件夹的文件
  • /img/**/*递归地将所有文件放入/img及其子文件夹

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

一个例子:

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

三星帮我找到了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"/

相关内容

  • 没有找到相关文章

最新更新