
假設我在本機電腦上有一個位於防火牆後面的目錄:
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/