我是 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'
也可以工作)bla
foo/barX
我删除了选项,-r
因为它已经包含在-a
.并且选项-m
会删除我们可能找到的所有空目录。