rsync usando parte de una ruta relativa

rsync usando parte de una ruta relativa

Supongamos que tengo un directorio en una máquina local, detrás de un firewall:

local:/home/meee/workdir/

Y un directorio en una máquina remota, al otro lado del firewall:

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

...tal que N>= 0.

Mi máquina local tiene un script que usa rsync. Quiero que este script se copie solo one/two/desde la máquina remota para una 'N' variable pero conocida de modo que termine con:

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

Si uso rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/, termino con:

local:/home/meee/workdir/two/

Si uso rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/, termino con:

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

Ninguno de estos es lo que quiero.

  1. ¿Existen rsyncbanderas que puedan lograr el resultado deseado?
  2. Si no, ¿alguien puede pensar en una solución sencilla?

Respuesta1

Para -- relativo tienes que insertar un punto en la ruta del directorio de origen:

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

Ver el manual:

-R, --relativo

[...]

También es posible limitar la cantidad de información de ruta que se envía como directorios implícitos para cada ruta que especifique. Con un rsync moderno en el lado de envío (comenzando con 2.6.7), puedes insertar un punto y una barra en la ruta de origen, así:

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

Respuesta2

Si está extrayendo archivos de una rsyncversión anterior a v2.6.7, puede hacerlo aprovechando rsyncla opción ' --rsync-path, que está destinada a permitirle especificar dónde se puede encontrar el comando rsync en el control remoto. Sin embargo, puedes usarlo para cambiar de directorio primero. Simplemente,

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

información relacionada