respaldos remoto incremental ejemplos con rsync

remoto - rsync: ¿cómo puedo configurarlo para crear el directorio de destino en el servidor?



rsync unix (7)

Esta respuesta utiliza fragmentos de otras respuestas, pero ojalá sea un poco más claro en cuanto a las circunstancias. Nunca especificaste lo que estabas conectando: una sola entrada de directorio o múltiples archivos.

Asumamos que está moviendo una entrada de directorio de origen, y no solo moviendo los archivos contenidos en ella.

Digamos que tienes un directorio llamado localmente data/myappdata/ y tienes una carga de subdirectorios debajo de esto. Tiene data/ en su máquina de destino pero no data/myappdata/ - esto es bastante fácil:

rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata

Incluso puede usar un nombre diferente para el directorio remoto:

rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname

Si solo está moviendo algunos archivos y no mueve la entrada del directorio que los contiene, entonces haría:

rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/

y creará el directorio myappdata para usted en la máquina remota para colocar sus archivos. De nuevo, los data/ directorio deben existir en la máquina remota.

A propósito, mi uso de la bandera -rvv es obtener una salida doblemente detallada para que quede claro qué hace, así como el comportamiento recursivo necesario.

Solo para mostrarte lo que obtengo al usar rsync (3.0.9 en Ubuntu 12.04)

$ rsync -rvv *.txt [email protected]:/tmp/newdir/ opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/ [email protected]''s password: sending incremental file list created directory /tmp/newdir delta-transmission enabled bar.txt foo.txt total: matches=0 hash_hits=0 false_alarms=0 data=0

Espero que esto aclare un poco.

Me gustaría rsync desde la computadora local al servidor. En un directorio que no existe, y quiero que rsync cree ese directorio en el servidor primero.

¿Cómo puedo hacer eso?


La opción -R, --relative hará esto.

Por ejemplo: si desea realizar una copia de seguridad /var/named/chroot y crear la misma estructura de directorios en el servidor remoto, entonces -R hará exactamente eso.


No creo que puedas hacerlo con un comando rsync, pero puedes ''precrear'' el directorio adicional primero así:

rsync --recursive emptydir/ destination/newdir

donde ''emptydir'' es un directorio vacío local (que puede que tenga que crear como un directorio temporal primero).

Es un truco, pero funciona para mí.

aclamaciones

Chris


Si tiene más que el último directorio de hojas para crear, puede ejecutar un ssh ... mkdir -p primero, o usar el truco --rsync-path como se explica aquí :

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/

O use la opción --relative según lo sugerido por Tony. En ese caso, solo especificará la raíz del destino, que debe existir, y no la estructura de directorio de la fuente, que se creará:

rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/

De esta forma, terminarás con / pre_existing / dir / new / x / y / z /


Suponiendo que está utilizando ssh para conectar rsync, ¿qué le parece enviar un comando ssh antes de:

ssh user@server mkdir -p existingdir/newdir

si ya existe, no pasa nada


esto funcionó para mí:

rsync /dev/null node:existing-dir/new-dir/

Recibo este mensaje:

skipping non-regular file "null"

pero no tengo que preocuparme por tener un directorio vacío dando vueltas.


p.ej:

desde: /xxx/a/b/c/d/e/1.html

a: usuario @ remote: /pre_existing/dir/b/c/d/e/1.html

rsync:

cd / xxx / a / && rsync -auvR b / c / d / e / usuario @ remote: / pre_existing / dir /