![rsync非递归复制目录内容](https://linux22.com/image/1318321/rsync%E9%9D%9E%E9%80%92%E5%BD%92%E5%A4%8D%E5%88%B6%E7%9B%AE%E5%BD%95%E5%86%85%E5%AE%B9.png)
我正在尝试将一系列目录的内容非递归地复制到另一个远程系统。
/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file
dir1、dir2 和 dir3 包含许多目录,我不要想要复制。在远程主机上复制到 /dirB,保持相同的目录结构。
我试过:
rsync /dirA/*/ host:/dirB/
rsync /dirA/ host:/dirB/
但他们没有做我想要做的事。
答案1
rsync 允许您指定触发文件和目录的包含或排除的模式。我认为您想使用类似这样的方法:
rsync -a -f '- /*/*/' /dirA/ host:/dirB/
解释:
-a
触发存档模式,激活递归和保存“符号链接、设备、属性、权限、所有权等”。man rsync
。-f
是 的缩写--filter=
,添加文件过滤规则。- 该模式位于单引号内,因此 shell 不会扩展通配符;在这种情况下,双引号也可以同样有效。
-
表示这是一个排除模式。- 前导
/
意味着模式必须从dirA/
(rsync“transfer-root”) 开始。 - 模式的部分
*/*
指的是子目录内的任何内容。 - 尾随的字符
/
将排除限制在目录中。子目录中的文件dirA/
不受影响。
所以最后,rsync 只会复制向下一级的内容(并且也不会创建二级目录)。
答案2
出于某种原因,上述解决方案(由 PleaseStand 提供)对我来说不起作用。不过这个有效:
rsync -avc --no-r ./source/* ./destination/
还有另一种方法:
rsync -avc --exclude "/" ./source/ ./destination/
答案3
rsync 的“特性”之一是如何解析目录。
rsync /dirA/ host:/dirB/
并且
rsync /dirA host:/dirB
理论上应该是等价的。
由于不想鼓励递归,您想避免-r
,-a
这除了其他事情之外还意味着-r
。
我的研究还没有完成,但这是我的初步答案。