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 /