rsync非递归复制目录内容


8

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

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

DIR1,DIR2,和DIR3包含很多目录,我希望被复制。在远程主机上复制到/ dirB并保持相同的目录结构。

我试过了:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

但是他们没有做我想要的。

Answers:


20

rsync允许您指定触发包含或排除文件和目录的模式。我认为您想使用以下方式:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

说明:

  • -a触发归档模式,激活“符号链接,设备,属性,权限,所有权等”的递归和保留man rsync
  • -f是的缩写--filter=,它添加了文件过滤规则。
    • 该模式在单引号内,因此外壳程序不会扩展通配符;在这种情况下,双引号同样适用。
    • - 表示这是一个排除模式。
    • 前导/意味着模式必须从dirA/(rsync“ transfer-root”)开始。
    • */*模式的一部分引用子目录中的任何内容。
    • 尾随/限制排除目录。的子目录中的文件dirA/不受影响。

因此,最后,rsync仅向下复制一级(并且不会创建第二级目录)。


2
非常好!我只能用来-f '- /*/'限制顶级文件。我还必须指定-f '- .*'排除点文件,因为我正在同步主目录。
haridsv 2014年


1

rsync的“功能”之一是如何解析目录。

rsync /dirA/ host:/dirB/ 并且在 rsync /dirA host:/dirB 理论上应该是等效的。

由于不想鼓励递归,因此您要避免-r-a这除了其他含义之外-r

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.