rsync非递归复制目录内容

rsync非递归复制目录内容

我正在尝试将一系列目录的内容非递归地复制到另一个远程系统。

/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

我的研究还没有完成,但这是我的初步答案。

相关内容