rsync与文件夹和文件名模式匹配复制文件

时间:2014-01-29 14:33:17

标签: terminal rsync

现在我成功运行了:

rsync -uvma  --include="*/" --include="*.css" --exclude="*" $spec_dir $css_spec_dir

在shell脚本中,它将源目录中的所有文件(即.css文件)复制到目标目录中。

我想对HTML文件执行相同操作,但仅限于位于名为“template”的子文件夹中的文件。

所以我在目录〜/ foo中,我想rsync,其中--include =“* /”只匹配名为'template'的子文件夹。所以〜/ foo / bar / template / baz / somefile.html会匹配,所以~foo / bar / baz / qux / template / someotherfile.html,但不是〜/ foo / bar / thirdfile.html

3 个答案:

答案 0 :(得分:2)

虽然看起来有点奇怪,但这对我有用:

rsync -uvma --include="*/" --include="*/template/*/*.html" --include="*/template/*.html" --include="template/*.html" --include="template/*/*.html" --exclude="*" $spec_dir $html_spec_dir

答案 1 :(得分:2)

这个适用于我:

rsync -umva --include="**/templates/**/*.html" --exclude="*.html" source/ target

你在寻找**吗?在这里您必须小心选择排除模式,*将无法正常工作,因为它匹配路上的目录。如果rsync找到foo/templates/some.html,它将首先复制foo,然后foo/templates然后foo/templates/some.html,但在它到达之前*已经匹配foo没有任何东西被复制。

答案 2 :(得分:0)

这是有效的:

rsync -uvma --include="*/" --include="templates/**.html"  --exclude="*" $html_all_dir $html_dir

我的猜测是,你的格式和我的可能完成同样的事情。我知道在这之前我尝试了大约20种不同的模式,这是唯一一种正常工作的模式。我不认为我尝试了你的格式:)