usar - rsync remoto
rsync-crear todos los directorios padre faltantes? (5)
Estoy buscando un programa similar a rsync
que creará los directorios principales que faltan en el lado remoto.
Por ejemplo, si tengo /top/a/b/c/d
en un servidor y solo /top/a
existe en el servidor remoto, quiero copiar d
al servidor remoto y también crear los directorios c
.
El comando:
rsync /top/a/b/c/d remote:/top/a/b/c
no funcionará porque /tmp/a/b
no existe en el servidor remoto. Y si existiera, el archivo d
se copiaría a la ruta /top/a/b/c
.
Esto se puede hacer con rsync
usando los interruptores --include
y --include
, pero es muy complicado, por ejemplo:
rsync -v -r a dest:dir /
--include ''a/b'' /
--include ''a/b/c'' /
--include ''a/b/c/d'' /
--include ''a/b/c/d/e'' /
--exclude ''a/*'' /
--exclude ''a/b/*'' /
--exclude ''a/b/c/*'' /
--exclude ''a/b/c/d/*''
solo copiará a/b/c/d/e
a dest:dir/a/b/c/d/e
incluso si los directorios intermedios tienen archivos. (Nota: los incluidos deben preceder a los excluye.)
¿Hay más opciones?
Estaba buscando una mejor solución, pero la mía parece ser más adecuada cuando tiene demasiados subdirectorios para crearlos manualmente.
Simplemente usa cp
como paso intermedio con la opción --parents
cp --parents /your/path/sub/dir/ /tmp/localcopy
rsync [options] /tmp/localcopy/* remote:/destination/path/
cp --parents
creará la estructura para ti.
Puede llamarlo desde cualquier subcarpeta si desea que solo se copie un subconjunto de las carpetas principales.
Le sugiero que haga cumplir la existencia manualmente:
ssh user@remote mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c
esto crea la carpeta de destino si no existe ya.
Usted puede estar buscando
rsync -aR
por ejemplo:
rsync -a --relative /top/a/b/c/d remote:/
Vea también este truco en otra pregunta .
--relative
no me funciona porque tenía una configuración diferente. Tal vez simplemente no entendí cómo funciona - --relative
, pero encontré que el
ssh remote mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c
Es fácil de entender y hace el trabajo.
rsync -aq --rsync-path=''mkdir -p /tmp/imaginary/ && rsync'' file user@remote:/tmp/imaginary/
Desde http://www.schwertly.com/2013/07/forcing-rsync-to-create-a-remote-path-using-rsync-path/ , pero no copie y pegue desde allí, su sintaxis es masacrada .
le permite ejecutar comandos arbitrarios para configurar la ruta de los ejecutables rsync.