rsync usando parte de um caminho relativo

4

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, no 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 tem um script que usa rsync . Eu quero que este script copie apenas one/two/ da máquina remota para um 'N' variável, mas conhecido, de tal forma que 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 rsync flags que podem alcançar o resultado desejado?
  2. Se não, alguém pode pensar em uma solução direta?
por Lagrangian 05.11.2016 / 07:23

2 respostas

11

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

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

Veja o manual:

-R, --relative

[...]

It is also possible to limit the amount of path information that is sent as implied directories for each path you specify. With a modern rsync on the sending side (beginning with 2.6.7), you can insert a dot and a slash into the source path, like this:

             rsync -avR /foo/./bar/baz.c remote:/tmp/
    
por 05.11.2016 / 08:17
3

Se você estiver obtendo arquivos de um rsync anterior à v2.6.7, poderá fazer isso aproveitando a opção --rsync-path do rync, que permite especificar onde o comando rsync pode ser encontrado no controlo 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/
    
por 05.11.2016 / 08:13

Tags