rsync非递归复制目录内容

Fel*_*rez 9 rsync

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

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file
Run Code Online (Sandbox Code Playgroud)

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

我试过:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/
Run Code Online (Sandbox Code Playgroud)

但他们不做我想做的。

Ple*_*and 20

rsync 允许您指定触发包含或排除文件和目录的模式。我想你想使用这样的东西:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/
Run Code Online (Sandbox Code Playgroud)

解释:

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

所以最后, rsync 只会向下复制一层(并且也不创建二级目录)。

  • 非常好!我能够使用`-f '- /*/'` 来限制只到顶级文件。我还必须指定`-f '- .*'` 来排除点文件,因为我正在同步一个主目录。 (2认同)

小智 6

由于某种原因,上面的解决方案(由 PleaseStand 提供)对我不起作用。这虽然有效:

rsync -avc --no-r ./source/* ./destination/

还有这个替代方案:

rsync -avc --exclude "/" ./source/ ./destination/