假设我在本地计算机上有一个位于防火墙后面的目录:
local:/home/meee/workdir/
以及位于防火墙另一侧的远程计算机上的目录:
remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/
...使得N
>= 0。
我的本地计算机有一个使用rsync
.我希望此脚本仅从远程计算机复制one/two/
变量但已知的“N”,这样我最终会得到:
local:/home/meee/workdir/one/two/
如果我使用rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/
,我最终会得到:
local:/home/meee/workdir/two/
如果我使用rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/
,我最终会得到:
local:/home/meee/workdir/a1/a2/.../aN/one/two/
这些都不是我想要的。
- 是否有
rsync
可以达到预期结果的标志? - 如果没有,有人能想到一个简单的解决方案吗?
答案1
对于 --relative 你必须在源目录路径中插入一个点:
rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/
请参阅手册:
-R, --相对
[...]
还可以限制作为指定的每个路径的隐含目录发送的路径信息量。使用发送端的现代 rsync(从 2.6.7 开始),您可以在源路径中插入一个点和一个斜杠,如下所示:
rsync -avR /foo/./bar/baz.c remote:/tmp/
答案2
rsync
如果您要从v2.6.7 之前的版本中提取文件,您可以利用rsync
的--rsync-path
选项来执行此操作,该选项旨在允许您指定在远程位置可以找到 rsync 命令。但是,您可以先使用它来更改目录。只需,
rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/