
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.
- Existem
rsync
sinalizadores que podem alcançar o resultado desejado? - 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 rsync
versã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/