rsync usando parte de um caminho relativo

rsync usando parte de um caminho relativo

Suponha que eu tenha um diretório em uma máquina local, atrás de um firewall:

local:/home/meee/workdir/

E um diretório em uma máquina remota, do outro lado do firewall:

remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/

... tal que N>= 0.

Minha máquina local possui um script que usa rsync. Quero que este script seja copiado apenas one/two/da máquina remota para um 'N' variável, mas conhecido, de modo que eu acabe com:

local:/home/meee/workdir/one/two/

Se eu usar rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/, acabo com:

local:/home/meee/workdir/two/

Se eu usar rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/, acabo com:

local:/home/meee/workdir/a1/a2/.../aN/one/two/

Nenhum desses é o que eu quero.

  1. Existem rsyncsinalizadores que podem alcançar o resultado desejado?
  2. Se não, alguém consegue pensar em uma solução direta?

Responder1

Para -- relativo você deve inserir um ponto no caminho do diretório de origem:

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

Veja o manual:

-R, --relativo

[...]

Também é possível limitar a quantidade de informações de caminho enviadas como diretórios implícitos para cada caminho especificado. Com um rsync moderno no lado do envio (começando com 2.6.7), você pode inserir um ponto e uma barra no caminho de origem, assim:

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

Responder2

Se você estiver extraindo arquivos de uma rsyncversão anterior a v2.6.7, poderá fazer isso aproveitando a opção rsync' --rsync-path, que permite especificar onde o comando rsync pode ser encontrado no controle remoto. No entanto, você pode usá-lo para alterar o diretório primeiro. Simplesmente,

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

informação relacionada