Respuestas:
Si tiene más de la última hoja de directorio para crear, puede ejecutar un ssh ... mkdir -pprimero por separado o usar el --rsync-pathtruco 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 --relativeopción sugerida por Tony. En ese caso, solo especifica la raíz del destino, que debe existir, y no la estructura de directorios de la fuente, que se creará:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
De esta manera, terminará con / pre_existing / dir / new / x / y / z /
Y si desea que se cree "y / z /", pero no dentro de "new / x /", puede agregar ./dónde desea --relativecomenzar:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
crearía / pre_existing / dir / y / z /.
&&?
Suponiendo que está utilizando ssh para conectar rsync, ¿qué hay de enviar un comando ssh antes:
ssh user@server mkdir -p existingdir/newdir
si ya existe, no pasa nada
rsync, por lo tanto, sin respuesta.
sshno es compatible y se rsyncconecta al rsync daemonextremo remoto.
La -R, --relativeopción hará esto.
Por ejemplo: si desea hacer una copia de seguridad /var/named/chrooty crear la misma estructura de directorios en el servidor remoto, entonces -Rhará exactamente eso.
/./la ruta de origen. Vea la página del manual para más detalles.
rsyncno creará directorios automáticamente si las carpetas de destino no existen. Suspiro.
--relative. Puede que no haga lo que piensas.
--relativeen conjunto con /./es lo que la mayoría de los novatos estarán buscando. rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/copiará el contenido del escritorio al escritorio de destino. No sé cómo las diferencias en los nombres de usuario pueden afectar esto.
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.
No creo que pueda hacerlo con un comando rsync, pero puede 'crear previamente' el directorio adicional primero de esta manera:
rsync --recursive emptydir/ destination/newdir
donde 'emptydir' es un directorio vacío local (que es posible que primero deba crear como directorio temporal).
Es un truco, pero funciona para mí.
salud
Chris
rsync /dev/null node:existing-dir/new-dir/sugerencia arriba.
Esta respuesta utiliza fragmentos de otras respuestas, pero espero que sea un poco más claro en cuanto a las circunstancias. Nunca especificó lo que estaba sincronizando: una sola entrada de directorio o varios archivos.
Así que supongamos que está moviendo una entrada de directorio de origen, y no solo moviendo los archivos contenidos en ella.
Digamos que tiene un directorio llamado localmente data/myappdata/y tiene 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 está moviendo 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 myappdatadirectorio para usted en la máquina remota para colocar sus archivos. Nuevamente, el data/directorio debe existir en la máquina remota.
Por cierto, mi uso de -rvvflag es obtener resultados doblemente detallados para que quede claro lo que hace, así como el comportamiento recursivo necesario.
Solo para mostrarle lo que obtengo cuando uso rsync (3.0.9 en Ubuntu 12.04)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine'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 esto un poco.
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdatapero lo que creó en el destino es / remote / path / to / data / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir, así que estoy usando el hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \crea un archivo adicional pero puedes eliminarlo más tarde.