rsync 使用部分相对路径

Lag*_*ian 12 rsync

假设我在本地机器上有一个位于防火墙后面的目录:

local:/home/meee/workdir/
Run Code Online (Sandbox Code Playgroud)

以及远程机器上的目录,在防火墙的另一边:

remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/
Run Code Online (Sandbox Code Playgroud)

...这样N>= 0。

我的本地机器有一个使用rsync. 我希望这个脚本只one/two/从远程机器复制一个可变但已知的“N”,这样我最终得到:

local:/home/meee/workdir/one/two/
Run Code Online (Sandbox Code Playgroud)

如果我使用rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/,我最终会得到:

local:/home/meee/workdir/two/
Run Code Online (Sandbox Code Playgroud)

如果我使用rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/,我最终会得到:

local:/home/meee/workdir/a1/a2/.../aN/one/two/
Run Code Online (Sandbox Code Playgroud)

这些都不是我想要的。

  1. 是否有rsync可以达到预期结果的标志?
  2. 如果没有,谁能想到一个简单的解决方案?

rud*_*ier 24

对于 --relative 你必须在源目录路径中插入一个点:

rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/
Run Code Online (Sandbox Code Playgroud)

看说明书:

-R, --相对

[...]

还可以限制作为您指定的每个路径的隐含目录发送的路径信息量。使用发送端的现代 rsync(从 2.6.7 开始),您可以在源路径中插入一个点和一个斜杠,如下所示:

             rsync -avR /foo/./bar/baz.c remote:/tmp/
Run Code Online (Sandbox Code Playgroud)


meu*_*euh 6

如果您从rsyncv2.6.7 之前的版本中提取文件,您可以利用 rync 的--rsync-path选项来执行此操作,该选项旨在允许您指定可以在远程上找到 rsync 命令的位置。但是,您可以先使用它来更改目录。简单地,

rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/
Run Code Online (Sandbox Code Playgroud)