
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.
- ¿Existen
rsync
banderas que puedan lograr el resultado deseado? - 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 rsync
versión anterior a v2.6.7, puede hacerlo aprovechando rsync
la 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/