我如何才能 rsync 仅同步来自不同子目录且文件名中包含特定字符串的文件?

我如何才能 rsync 仅同步来自不同子目录且文件名中包含特定字符串的文件?

我有一个子目录树,其中一些子目录包含一个名称中包含单词“template”的文件。我想将它们 rsync 到不同位置的同一子目录树。

例如:来源:

curfolder/dir1/dir2/blah_template.ext
curfolder/dir3/dir4/foo_template.blah

预定目的地:

destfolder/dir1/dir2/blah_template.ext
destfolder/dir3/dir4/foo_template.blah

此命令不起作用;它将所有文件放在基本目标文件夹中,而不是正确的子目录中:

rsync -av curfolder/*/*/*template* destfolder

所以我想我需要一个类似这样的过滤器,但它不起作用(它似乎只是同步所有内容):

rsync -av -f"+ *template*" curfolder destfolder

答案1

一种方法是:

rsync -av --include "*/" --include="*_template*" --exclude="*" --prune-empty-dirs curfolder/ destfolder/  

rsync 手册

它的作用,用文字表达就是:

  1. 包括每个文件夹
  2. 包含所有匹配项_模板
  3. 排除其他一切
  4. 删除空文件夹

这两个包含项优先于排除项,因此排除项仅匹配包含项不匹配的所有内容。

相关内容