rsync 递归地复制匹配模式的子目录下游的文件

rsync 递归地复制匹配模式的子目录下游的文件

我是 rsync 的新手,并且有一个相当深的目录,如下所示:

source
  |
  +--foo
  |   |
  |   +--bar1
  |   |   | 
  |   |   +--bla (more dirs down the line)
  |   +--bar2
  |   |   |
  |   |   +--... 
  |   +--bar3
  |       |
  |       +--bla (more dirs down the line)
  ...

现在,我想遍历/搜索完整路径并递归复制位于 bla 目录内部/之后的所有 csv 文件(即在 bla 的子目录中)。阅读了这里的一些文档和帖子后,我认为类似于

rsync -ravm --include='/**/bla/' --include='*.csv' --exclude='*' source/ . 

应该可以解决问题,但无论我尝试包含和排除的任何组合,它要么从任何地方复制所有 CSV,要么什么也不复制。

我在这里没有看到什么?任何帮助是极大的赞赏。

我使用的是 bash 4.3.48 和 rsync 3.1.1。

答案1

这似乎可以解决问题:

rsync -avm --include='*/' --include='foo/*/bla/**.csv' --exclude='*' source/ .

或者

rsync -avm --include={'*/','foo/*/bla/**.csv'} --exclude='*' source/ .
  • --exclude='*'排除所有文件
  • --include='*/'包含目录
  • --include='foo/*/bla/**.csv'bla在目录 中或目录下包含 *.csv 文件(如果始终在目录下,则
    相对的文件--include='bla/**.csv'也可以工作)blafoo/barX

我删除了选项,-r因为它已经包含在-a.并且选项-m会删除我们可能找到的所有空目录。

相关内容