我有一个子目录树,其中一些子目录包含一个名称中包含单词“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/
它的作用,用文字表达就是:
- 包括每个文件夹
- 包含所有匹配项_模板
- 排除其他一切
- 删除空文件夹
这两个包含项优先于排除项,因此排除项仅匹配包含项不匹配的所有内容。