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 :
/*.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
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"/
我正在尝试 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 :
/*.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
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"/