Me gustaría rsync
desde la computadora local al servidor. En un directorio que no existe, y rsync
primero quiero crear ese directorio en el servidor.
¿Cómo puedo hacer eso?
Si tiene más de la última hoja de directorio para crear, puede ejecutar un ssh ... mkdir -p
primero por separado o usar el --rsync-path
truco 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 --relative
opció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 --relative
comenzar:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
crearía / pre_existing / dir / y / z /.
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.&&
?Suponiendo que está utilizando ssh para conectar rsync, ¿qué hay de enviar un comando ssh antes:
si ya existe, no pasa nada
fuente
rsync
, por lo tanto, sin respuesta.ssh
no es compatible y sersync
conecta alrsync daemon
extremo remoto.La
-R, --relative
opción hará esto.Por ejemplo: si desea hacer una copia de seguridad
/var/named/chroot
y crear la misma estructura de directorios en el servidor remoto, entonces-R
hará exactamente eso.fuente
/./
la ruta de origen. Vea la página del manual para más detalles.rsync
no creará directorios automáticamente si las carpetas de destino no existen. Suspiro.--relative
. Puede que no haga lo que piensas.--relative
en 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í:
Recibo este mensaje:
pero no tengo que preocuparme por tener un directorio vacío dando vueltas.
fuente
No creo que pueda hacerlo con un comando rsync, pero puede 'crear previamente' el directorio adicional primero de esta manera:
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
fuente
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. Tienedata/
en su máquina de destino pero nodata/myappdata/
, esto es bastante fácil:Incluso puede usar un nombre diferente para el directorio remoto:
Si solo está moviendo algunos archivos y no está moviendo la entrada del directorio que los contiene, entonces haría:
y creará el
myappdata
directorio para usted en la máquina remota para colocar sus archivos. Nuevamente, eldata/
directorio debe existir en la máquina remota.Por cierto, mi uso de
-rvv
flag 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)
Espero que esto aclare esto un poco.
fuente
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
pero 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
p.ej:
de: /xxx/a/b/c/d/e/1.html
a: usuario @ remoto: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / user @ remote: / pre_existing / dir /
fuente