Rsync

rsync 使用相對路徑的一部分

  • November 14, 2021

假設我在本地機器上有一個目錄,位於防火牆後面:

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/

這些都不是我想要的。

  1. 是否有rsync可以達到預期結果的標誌?
  2. 如果沒有,誰能想到一個簡單的解決方案?

對於 – relative 你必須在源目錄路徑中插入一個點:

rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/

參見手冊:

-R,–相對

$$ … $$ 對於您指定的每個路徑,還可以限製作為隱含目錄發送的路徑資訊量。在發送端使用現代 rsync(從 2.6.7 開始),您可以在源路徑中插入一個點和一個斜杠,如下所示:

            rsync -avR /foo/./bar/baz.c remote:/tmp/

如果您從rsyncv2.6.7 之前的版本中提取文件,您可以利用rsync’s--rsync-path選項來執行此操作,這意味著您可以指定在遠端可以找到 rsync 命令的位置。但是,您可以先使用它來更改目錄。簡單地,

rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/

引用自:https://unix.stackexchange.com/questions/321219